如何解决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 举报,一经查实,本站将立刻删除。