您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使LAG()在SQL Server中忽略NULL?

如何使LAG()在SQL Server中忽略NULL?

sql Server不支持ignore nulls窗口功能(例如lead()和)的选项lag(),对此问题非常适合。

我们可以通过一些差距和孤岛技术来解决此问题:

select
    t.*,
    max(past_due_col) over(partition by grp) new_past_due_col
from (
    select 
        t.*,
        sum(case when past_due_col is null then 0 else 1 end)
            over(order by id) grp
    from mytable t
) t

查询执行的窗口总和每次发现非null值时都会递增:这定义了包含非null值后跟null值的行组。

然后,外部使用窗口max()检索每个组中的(仅)非null值。

假设可以使用一列对记录进行 排序 (我称之为id)。

ID | PAST_DUE_COL            | grp | new_past_due_col       
-: | :---------------------- | --: | :----------------------
 1 | 91 or more days pastdue |   1 | 91 or more days pastdue
 2 | null                    |   1 | 91 or more days pastdue
 3 | null                    |   1 | 91 or more days pastdue
 4 | 61-90 days past due     |   2 | 61-90 days past due    
 5 | null                    |   2 | 61-90 days past due    
 6 | null                    |   2 | 61-90 days past due    
 7 | 31-60 days past due     |   3 | 31-60 days past due    
 8 | null                    |   3 | 31-60 days past due    
 9 | 0-30 days past due      |   4 | 0-30 days past due     
10 | null                    |   4 | 0-30 days past due     
11 | null                    |   4 | 0-30 days past due     
12 | null                    |   4 | 0-30 days past due     
SQLServer 2022/1/1 18:51:31 有419人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶