[英]Calculating Stock Returns Using SQL LAG Function
我有一張要計算每日收益的股票價格表:
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
我有一個使用滯后函數計算收益的公式,但是我不知道在處理新的股票行情時如何將值重新設置為NULL。
它使用13年1月5日的ABC價格計算出03年1月1日的XYZ回報。 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;
您可以在日期上使用if語句,如果日期不在合法范圍內,則返回null,否則返回公式。
(IF date_field<lower_date,null,...............what ever......)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.