使用 SQL LAG 函数计算股票 Returns

Calculating Stock Returns Using SQL LAG Function

我有一个 table 的股票价格,我试图每天计算 returns:

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

我有一个使用滞后函数计算 returns 的公式,但我不知道如何在处理新代码时将值重新设置为 NULL。

它使用 ABC 从 2013 年 1 月 5 日起的价格来计算 XYZ 在 03 年 1 月 1 日的 return。 XYZ 的 01/01/03 return 应该为 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

我需要创建一个循环来计算正确的 return 吗?

你想要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;

您可以在日期上使用 if 语句,如果日期不在合法范围内,您 return null,否则,return 您的公式。

(IF date_field<lower_date,null,...............what ever......)