我有一个系统,人们可以在这个系统中挑选一些股票,并对他们的投资组合进行估值,但我每天都无法有效地做到这一点,因为我正在为没有任何变化的日子创建条目(想象一下,我正在测量价值并进行版本控制,这样我就可以跟踪投资组合设计方式的变化)。
下面是一个例子(每天的投资组合以及股票名称和权重):
Day1:
ibm = 10%
microsoft = 50%
google = 40%
day5:
ibm = 20%
microsoft = 20%
google = 40%
cisco = 20%我可以在day1上衡量投资组合的价值,并理解我需要在day5上再次衡量它(当它发生变化时),但我如何在不重新创建数据库中的第1天条目的情况下衡量第2-4天?
我现在的方法(我不喜欢)是在我的数据库中创建一个临时条目,用于当有人更改投资组合时,然后在一天结束时,当我计算价值时,如果有临时条目,我使用它,否则我使用最近几天的数据创建一个新条目(第2-4天)。问题是,由于数据通常不会改变,所以我创建的条目基本上是重复的。问题是:我的股票数据都是每天的。我也想过拿投资组合,如果它在3天内没有更新,就可以找到每只股票过去3天的回报,但我不确定是否有更好的解决方案。
有什么想法吗?我认为这是一个直截了当的问题,但我就是看不到一个有效的方法。
注意:在金融术语中,这被称为创建资产净值,大多数公司都是以我这样做的低效方式来做这件事,但这是因为这个过程是在大约50年前创建的,并且没有改变。我认为这个问题与版本控制非常相似,但我似乎无法做出解决方案。
发布于 2012-06-30 22:45:38
在存储术语中,最有意义的就是直接存储:
UserId - StockId1 - 23% - 2012-06-25 UserId - StockId2 - 11% - 2012-06-26 UserId - StockId1 - 20% - 2012-06-30
所以你可以看到股票1在30号下跌了。现在,如果您想知道第28天的StockId1百分比,只需选择:
SELECT *
FROM stocks
WHERE datecolumn<=DATE(2012-06-28)
ORDER BY datecolumn DESC LIMIT 0,1如果它没有返回任何东西,那么你就没有得到它,否则你就会得到最后一个位置。
顺便说一句。例如,如果您需要一个股票1的图表,您可以对一个充满日期的表进行连接。然后你就可以很容易地填上空白了。
例如,我在这里找到了这篇文章:
UPDATE mytable
SET number = (@n := COALESCE(number, @n))
ORDER BY date;SQL QUERY replace NULL value in a row with a value from the previous known value
https://stackoverflow.com/questions/11274875
复制相似问题