(我将首先解释我的问题。下表(任何示例查询)可在 http://sqlfiddle.com/#!2/8ec17/4上找到)
我有一张包含股票信息的表格,如下所示:
sp100_id _date bullishness returnpct
----------------------------------------------
1 2011-03-16 1.01 -0.33
1 2011-03-17 0.85 -1.28
1 2011-03-18 0.89 1.25
1 2011-03-21 1.46 1.21
1 2011-03-22 0.39 -2.53
2 2011-03-16 3.07 1.27
2 2011-03-17 2.09 -0.80
2 2011-03-18 0.91 -0.12
2 2011-03-21 1.50 0.00
2 2011-03-22 2.62 1.10
3 2011-03-16 0.73 -1.13
3 2011-03-17 1.13 1.21
3 2011-03-18 1.12 0.45
3 2011-03-21 1.00 1.01
3 2011-03-22 1.00 -0.53
4 2011-03-16 0.40 1.10
4 2011-03-17 2.40 0.03
4 2011-03-18 3.16 -0.10
4 2011-03-21 0.86 0.50
4 2011-03-22 1.00 0.10
我需要的是:
- 每连续 3 天,计算每家公司的平均看涨程度 (
sp100_id
) returnpct
取平均看涨度最高的公司的第 3 天并存储returnpct
最后,通过将存储returnpct
的 s相加来计算总数
在这个例子中有 5 _date
s,所以有连续的天数对:
2011-03-16
,2011-03-17
,2011-03-18
2011-03-17
,2011-03-18
,2011-03-21
(请注意,2011-03-19 不在表中)2011-03-18
,2011-03-21
,2011-03-22
回到我需要的东西:
- 在前三天,“赢家”是公司 2,平均牛市为 (3.07 + 2.09 + 0.91) / 3 = 2.0233,第三天的回报率为 -0.12。对于其他 2 个“日期范围”,获胜者是公司 4(平均牛市 2.14 和回报率 0.50)和公司 2(牛市 1.67,回报率 1.10)
- 应存储值 -0.12、0.50、1.10
- 总 returnpct 将是 -0.12 + 0.50 + 1.10 = 1.48,应该从查询(或脚本)返回
问题 1:关于上面的例子,我的查询返回第 1 天returnpct
(1.27) 而不是第 3 天returnpct
(-0.12)。我怎样才能改变这个?
问题2:在sqlfiddle中,我连续3天硬编码了第一组。我怎样才能自动化这个(也许使用 php),这样我就不必手动输入所有查询?请注意表格中缺少日期。与示例中一样,脚本应该只取表中的下一个可用日期(所以 after 2011-03-18
come 2011-03-21
,而不是2011-03-19
因为它不在表中)
问题 3:在示例中,我使用了连续 3 天,但理想情况下,可以轻松更改脚本以使用任何其他连续天数(例如 2、4 或 8 天)。因此,应分别存储第 2 天、第 4 天或第 8 天的返回值。
谁能帮我解决我在这里遇到的一些问题?任何帮助是极大的赞赏 :-)