我有一张股票价格表,我正在尝试计算每日回报:
Ticker Date price
ABC 01/01/13 100.00
ABC 01/02/13 101.50
ABC 01/03/13 99.80
ABC 01/04/13 95.50
ABC 01/05/13 78.00
XYZ 01/01/13 11.50
XYZ 01/02/13 12.10
XYZ 01/03/13 13.15
XYZ 01/04/13 14.10
XYZ 01/05/13 15.55
我有一个使用 Lag 函数计算回报的公式,但我不知道在处理新的股票代码时如何将值重新设置为 NULL。
它使用 ABC 2013 年 1 月 5 日的价格来计算 XYZ 2003 年 1 月 1 日的回报。 XYZ 的 01/01/03 返回应该为 NULL。
Ticker Date price RETURN
ABC 01/01/13 100.00 NULL
ABC 01/02/13 101.50 1.50
ABC 01/03/13 99.80 -1.67
ABC 01/04/13 95.50 -4.31
ABC 01/05/13 78.00 -18.32
XYZ 01/01/13 11.50 -85.26
XYZ 01/02/13 12.10 5.22
XYZ 01/03/13 13.15 8.68
XYZ 01/04/13 14.10 7.22
XYZ 01/05/13 15.55 10.28
这是我的脚本:
SELECT Ticker,Date, price,((price / lag(price, 1) OVER (ORDER BY Ticker, [Date])) - 1)* 100 AS 'RETURN'
FROM [dbo].[Temp]
Order by Ticker, Date
我需要创建一个循环来计算正确的回报吗?
你要partition by
:
SELECT Ticker, Date, price,
((price / lag(price, 1) OVER (PARTITION BY Ticker ORDER BY [Date])) - 1)* 100 AS daily_return
FROM [dbo].[Temp]
Order by Ticker, Date;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)