簡體   English   中英

使用SQL LAG函數計算庫存收益

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM