首页 > 解决方案 > 在 Oracle 中满足条件时重置运行总和

问题描述

我的数据结构如下:

Timestamp   | Hour | Count
--------------------------
20190801 01 |    1 |    10
20190801 02 |    2 |    20
20190801 03 |    3 |    10
20190801 04 |    4 |     5
20190801 05 |    5 |    15
20190801 06 |    6 |    10
20190802 01 |    1 |     5
20190802 02 |    2 |    20
20190802 03 |    3 |     5
20190802 04 |    4 |    15
20190802 05 |    5 |    20
20190802 06 |    6 |     5
20190803 01 |    1 |    30

我正在尝试创建一个 SQL 查询,该查询将计算运行中的 SUM,但在小时为 1 时重置。结果应如下所示:

Hour | Count | SUM
------------------
   1 |    10 |  10
   2 |    20 |  30
   3 |    10 |  40
   4 |     5 |  45
   5 |    15 |  60
   6 |    10 |  70
   1 |     5 |   5    /* RESET */
   2 |    20 |  25
   3 |     5 |  30    
   4 |    15 |  45
   5 |    20 |  65
   6 |     5 |  70
   1 |    30 |  30    /* RESET */

标签: sqloracle

解决方案


您可以使用sum()分析功能:

select t."Hour","Count",
       sum("Count") over (partition by substr("Timestamp",1,8) order by "Timestamp") as "sum"
  from t

Demo


推荐阅读