-3
我創建了一個包含日期和資產價格的臨時表。我想要說明每日回報。當我使用LAG()時,它完美地工作,但是當我使用CROSS APPLY時,出現了一些問題。有人可以解釋我的錯誤在哪裏嗎?爲什麼CROSS APPLY工作不正常?
CREATE TABLE #returns (Data Date, s Float);
INSERT INTO #returns (Data, s) VALUES ('20120618', 142), ('20120619', 122), ('20120620', 145), ('20120621', 148), ('20120622', 111);
SELECT *
FROM #returns
SELECT Data, (s/LAG(s) OVER(ORDER BY Data) -1)
FROM #returns
SELECT tLater.Data, (tLater.s/tPrev2.s) - 1
FROM #returns as tLater
CROSS APPLY
(
SELECT TOP 1 tPrev.s
FROM #returns as tPrev
WHERE tPrev.Data < tlater.Data
ORDER BY tPrev.Data
) as tPrev2
'出問題了'。那是什麼? –
你必須1)使用'OUTER APPLY'而不是'CROSS APPLY'來獲得第一條記錄,它沒有以前的記錄,並且2)使用'ORDER BY DESC'來獲取前一條記錄。 –