SQL:按标准求和

KMa*_*ron 2 sql oracle criteria sum

我正在使用Oracle,目前无法实现我需要的查询.

假设我有下表:

- ID    Date    Type    Value
 - 1    01/12/2016  prod    1
 - 2    01/01/2017  test    10
 - 3    01/06/2017  test    20
 - 4    01/12/2017  prod    30
 - 5    15/12/2017  test    40
 - 6    01/01/2018  test    50
 - 7    01/06/2018  test    60
 - 8    01/12/2018  prod    70
Run Code Online (Sandbox Code Playgroud)

我需要在"prod"TYPES +最后一个"prod"VALUE之间加总值.结果应该是:

- 1 01/01/2016 - 1
- 2 01/01/2017 - 60
- 3 01/06/2017 - 60
- 4 01/12/2017 - 60
- 5 15/12/2017 - 220
- 6 01/01/2018 - 220
- 7 01/06/2018 - 220
- 8 01/12/2018 - 220
Run Code Online (Sandbox Code Playgroud)

我首先要在不考虑TYPES的情况下按年计算VALUES.需求发生了变化,我不知道如何开始识别每一行,即前一个"prod"DATE并将每个VALUE相加,包括最后一个"prod"TYPE.

谢谢

Gor*_*off 5

您可以使用累计和来定义组type = 'PROD'- 反过来,然后使用窗口函数进行最终求和:

select t.*,
       sum(value) over (partition by grp) as total
from (select t.*,
             sum(case when type = 'PROD' then 1 else 0 end) over (order by id desc) as grp
      from t
     ) t
 order by id;
Run Code Online (Sandbox Code Playgroud)

要查看分组逻辑,请查看:

ID    Date    Type    Value      Grp
1    01/12/2016  prod    1        3
2    01/01/2017  test    10       2
3    01/06/2017  test    20       2
4    01/12/2017  prod    30       2
5    15/12/2017  test    40       1
6    01/01/2018  test    50       1
7    01/06/2018  test    60       1
8    01/12/2018  prod    70       1
Run Code Online (Sandbox Code Playgroud)

这标识了需要求和的组.这DESC是因为"prod" 结束了一个群体.如果"prod"开始一个组(即包含在下一行的总和),那么ASC将被使用.

Rextester演示