-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'来获取前一条记录。 –