2012-06-30 65 views
0

我有一个系统,人们可以挑选一些股票,它很重视他们的投资组合,但我每天都在以有效的方式做这件事,因为我为没有任何变化的日子创建条目(想想它像我测量值和版本控制,所以我可以跟踪组合设计方式的变化)。如何跟踪股票投资组合中的变化项目?

下面是一个例子(每一天的投资​​组合与股票名称和重量):

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

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

我可以用来衡量投资组合对第1天的价值和理解,我需要再次进行测量并在第5天(当它改变)但我如何衡量day2-4而不重新创建day1在数据库中的条目?

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

任何想法?我认为这是一个非常直接的问题,但我看不出有效的方式。

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

回答

0

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

用户ID - StockId1 - 23% - 2012-06-25 用户ID - StockId2 - 11% - 2012-06-26 用户ID - 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; 

+0

我不知道我理解你的做法。如果我每天存储每只股票的具体回报,这不会是最糟糕的吗?或者我不理解你的方法?顺便说一下,如果不明确,在我的例子中,股票旁边的百分比是我拥有多少的重量..所以在第一天,我的投资组合中有50%是微软,而不是微软当天上涨了50%。 –