Oracle SQL-基于分组和条件的运行总和

维拉特

我的桌子看起来像

ID      SEQ       LABEL     COUNT
1        1           0       3
1        2           0       2
1        3           0       6
1        4           1       2
1        5           0       3
1        6           0       5
2        1           0       2
2        2           1       1
2        3           0       3

我想创建一个名为running_count的列。它计算列数的累积和,直到Label为1,然后重置并再次开始累积和。

预期产量:

ID      SEQ       LABEL1     COUNT1     RUNNING_COUNT
1        1           0       3              3
1        2           0       2              5
1        3           0       6              14
1        4           1       2              16
1        5           0       3              3
1        6           0       5              8
2        1           0       2              2
2        2           1       1              3
2        3           0       3              3

我尝试了以下查询

SELECT A.*, SUM(COUNT1) over (partition by ID,LABEL1 order by SEQ) as RUNNING_COUNT FROM TABLE_1 A

这里的问题是,对于Label = 1,累积总和在上一行(Seq)中停止。我需要获取连续的总和,直到基于Seq的每个ID的Label = 1。

我得到的输出错误

ID      SEQ       LABEL1     COUNT1     RUNNING_COUNT
1        1           0       3              3
1        2           0       2              5
1        3           0       6              14
1        4           1       2              2
1        5           0       3              3
1        6           0       5              8
2        1           0       2              2
2        2           1       1              1
2        3           0       3              3
专线小巴

您可以创建第一个窗口sum()来定义组,然后将其用作外部查询的分区:

select 
    t.*,
    sum(count1) over(partition by id, grp order by seq) running_count
from (
    select 
        t.*,
        sum(label) over(partition by id order by seq desc) grp
    from mytable t
) t

DB Fiddle上的演示

ID | 序列| 标签| COUNT1 | 玻璃钢| RUNNING_COUNT- 
:| -:| ----:| -----:| -:| ------------:
 1 | 1 | 0 | 3 | 1 | 3 
 1 | 2 | 0 | 2 | 1 | 5 
 1 | 3 | 0 | 6 | 1 | 11 
 1 | 4 | 1 | 2 | 1 | 13 
 1 | 5 | 0 | 3 | 0 | 3 
 1 | 6 | 0 | 5 | 0 | 8 
 2 | 1 | 0 | 2 | 1 | 2 
 2 | 2 | 1 | 1 | 1 | 3 
 2 | 3 | 0 | 3 | 0 | 3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章