连续为0的值,如果当前值为0,则向前取第一个不为0的值

oracle 数据库,连续为0的值,如果当前值为0,则向前取第一个不为0的值,试过用lag函数,但是连续为0时就无法实现。数据如下,请问有什么办法实现想要的结果吗?

时间段id     工单数量            想要展示的结果

1                 1                            1

2                 3                             3

3                 0                             3

4                 0                             3

5                 5                             5

6                 0                             5

7                 8                             8

SQL 帆软用户BVVcrR2D7A 发布于 2024-1-22 14:45
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
luojian0323Lv7资深互助
发布于2024-1-22 14:48(编辑于 2024-1-22 15:09)

告诉你思路,把数据为0的过滤掉,按序号排序,再加一个倒序序号,然后取序号为1的记录

和你要取值的数据关联

试试这段sql

SELECT 时间段id, LAST_VALUE(CASE WHEN 工单数量 > 0 THEN 工单数量 END IGNORE NULLS) OVER (ORDER BY 时间段id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 工单数量 FROM 工单表;

最佳回答
0
Z4u3z1Lv6专家互助
发布于2024-1-22 14:54(编辑于 2024-1-22 14:56)

SELECT A.ID,(CASE WHEN A.数量=0 THEN (SELECT B.数量 FROM TABLENAME B WHERE B.ID<A.ID AND  B.数量>0 order by b.id DESC LIMIT 1)  ELSE A.数量 END) [数量] FROM TABLENAME A 

  • 2关注人数
  • 246浏览人数
  • 最后回答于:2024-1-22 15:09
    请选择关闭问题的原因
    确定 取消
    返回顶部