微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DB2 11.5 LEAD LAG 忽略空值

如何解决DB2 11.5 LEAD LAG 忽略空值

我需要使用滞后函数来忽略空记录。

我在没有滞后功能的情况下运行此脚本,但滞后功能不适用于“IGnorE NULLS”参数。

有什么想法吗?

SELECT 
  ID,READING_TIME,MEASURE_FIELD,FirsT_value(MEASURE_FIELD,'IGnorE NULLS' ) 
    OVER(PARTITION BY ID,trunc(READING_TIME,'MM') 
         order by READING_TIME asc) as LAST_HOUR_MEASURE,FirsT_VALUE(MEASURE_FIELD,trunc(READING_TIME) 
         order by READING_TIME desc) as LAST_DAILY_MEASURE,LAG(MEASURE_FIELD,'IGnorE NULLS') 
    OVER (order by READING_TIME desc) as LAG_MEASURE
FROM stg.table t  
ORDER BY 2

解决方法

请试试这个:

SELECT 
  ID,READING_TIME,MEASURE_FIELD,LAG(MEASURE_FIELD IGNORE NULLS ) 
    OVER(PARTITION BY ID,trunc(READING_TIME,'MM') 
         order by READING_TIME asc) as LAST_HOUR_MEASURE,LAG(MEASURE_FIELD ) 
    OVER(PARTITION BY ID,trunc(READING_TIME) 
         order by READING_TIME desc),IGNORE NULLS  as LAST_DAILY_MEASURE,LAG(MEASURE_FIELD) 
    OVER (order by READING_TIME desc) IGNORE NULLS as LAG_MEASURE
FROM stg.table t  
ORDER BY 2
,

你的语法有点不对。试试:

select *,lag(b,1,-1,'IGNORE NULLS') over(order by a) as prev_b
from t

对于示例数据,例如:

A B
- ------ 
1 101    
2 null
3 103    
4 null
5 105    

它产生:

A B      PREV_B
- ------ ------
1 101        -1   
2 null      101  
3 103       101  
4 null      103  
5 105       103  

请参阅 db<>fiddle 上的运行示例。

注意:在 LAG() 函数中,第三个参数不能为空(不幸的是)。我在这个例子中使用了 -1 来演示当函数没有找到值时如何使用这个值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。