由于SQL Server不支持
first_value
函数中的忽略空值,我们如何在不定义新列的情况下获取窗口中的第一个非空值?
我尝试使用
COALESCE()
,但它不能用作窗口函数。
如前所述,
FIRST_VALUE
确实支持 IGNORE NULLS
(在 SQL Server 2022+ 中)。因此,您可以做:
FIRST_VALUE(YourColumn) IGNORE NULLS OVER (PARTITION BY SomeColumn ORDER BY AnotherColumn) AS FirstValue
在没有语法的情况下模拟
FIRST_VALUE
并不太困难,只需在列上的 CASE
中添加 ORDER BY
即可稍后对 NULL
值进行排序:
FIRST_VALUE(YourColumn) OVER (PARTITION BY SomeColumn ORDER BY CASE WHEN YourColumn IS NULL THEN 1 ELSE 0 END, OtherColumn)
这将强制将
NULL
的值稍后排序,因此如果所有值都是 NULL
,则只能是第一个值。