【问题标题】:Oracle SQL - Running Sum based on group by and conditionOracle SQL - 基于分组和条件运行求和
【发布时间】:2020-03-31 16:38:41
【问题描述】:

我的桌子看起来像

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

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper window-functions gaps-and-islands


    【解决方案1】:

    您可以创建第一个窗口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
    

    Demo on DB Fiddle

    身份证 |序列 |标签 |计数1 |玻璃钢 | 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2017-06-01
      相关资源
      最近更新 更多