如这里所示,Server中的LAST_VALUE函数需要指定一个框架(例如。( ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)或默认值将是当前行的第一行。对于LEAD来说,情况似乎并非如此。这两个函数都是“前瞻性”的,那么是否有任何文档显示的不一致的原因呢?
一切都如期而至,我只是想对我多年来一直使用的功能有一个更扎实的理解。
发布于 2020-04-17 15:00:21
LAST_VALUE的默认窗口框架是RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,因此,如果您希望包含所有行,则需要使用指定的窗口fra,e。
在本例中,DifferenceFromLastQuarter列中返回的非零值需要子句“当前行与无界跟随之间的范围”,如下所示。默认范围是“前一行和当前行之间的范围”。
因此,如果没有ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING,那么您将得到带有LAST_VALUE的当前行,因为这是默认窗口框架中的最后一行。
另一方面,LEAD不使用ROWS或RANGE BETWEEN,因此可以访问整个数据集范围。尝试使用ROWS BETWEEN会产生一个错误:
SELECT V.I,
LEAD(V.I) OVER (ORDER BY V.I ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS L
FROM (VALUES(1),(2),(3))V(I);函数'LEAD‘可能没有窗口框。
https://stackoverflow.com/questions/61274247
复制相似问题