0

我有一个系统,人们可以在其中挑选一些股票并评估他们的投资组合,但我每天都无法以有效的方式做到这一点,因为我正在为没有任何变化的日子创建条目(想想看就像我正在衡量价值并进行版本控制,以便我可以跟踪投资组合设计方式的变化)。

这是一个例子(每天的投资组合,带有股票名称和权重):

Day1:
ibm = 10%
microsoft = 50%
google = 40%

day5:
ibm = 20%
microsoft = 20%
google = 40%
cisco = 20%

我可以在第 1 天测量投资组合的价值,并了解我需要在第 5 天(当它发生变化时)再次测量它,但是如何在不重新创建第 1 天在数据库中的条目的情况下测量第 2-4 天?

我现在的方法(我不喜欢)是在我的数据库中创建一个临时条目,用于当有人更改投资组合时,然后在一天结束时我计算值,如果有一个临时条目我会使用它我使用最近几天的数据创建了一个新条目(用于第 2-4 天)。问题是因为数据通常不会改变,所以我创建的条目基本上是重复的。问题是:我的股票数据都是每天的。我还考虑过投资组合,如果它在 3 天内没有更新,以找到每只股票最近 3 天的回报,但我不确定是否有更好的解决方案。

有任何想法吗?我认为这是一个直截了当的问题,但我只是看不到一种有效的方法。

注意:在财务方面,它被称为创建资产净值,大多数公司这样做的效率很低,但这是因为这个过程是在 50 年前创建的,并且没有改变。我认为这个问题与版本控制非常相似,但我似乎无法解决。

4

1 回答 1

0

在存储方面最有意义的是只存储:

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 用前一个已知值中的值替换行中的 NULL 值

于 2012-06-30T14:45:38.257 回答