当我在手工构造的数据集上使用FIRST_VALUE时,我得到一个结果,当我在由左连接产生的数据集上使用它时,我得到了不同的结果 - 即使数据集在我看来包含完全相同的数据值.我用下面的简单数据集重现了这个问题.
有人能告诉我,如果我误解了什么吗?
此SQL生成预期结果,FIRST_VALUE为NULL且LAST_VALUE为30.
SELECT
agroup,
aval,
FIRST_VALUE(aval) OVER (PARTITION BY agroup ORDER BY aval ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) fv,
LAST_VALUE(aval) OVER (PARTITION BY agroup ORDER BY aval ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) lv
FROM
(
SELECT 1 agroup, 10 aval
UNION ALL SELECT 1, NULL
UNION ALL SELECT 1, 30
) T
Run Code Online (Sandbox Code Playgroud)
此SQL使用LEFT JOIN导致与上面相同的数据集,但FIRST_VALUE似乎忽略NULL.
SELECT
agroup,
aval,
FIRST_VALUE(aval) OVER (PARTITION BY agroup ORDER BY aval ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) fv, …Run Code Online (Sandbox Code Playgroud) t-sql sql-server aggregate-functions window-functions sql-server-2012