SQL Oracle 中基于 7 天周期的总和值

sum values based on 7-day cycle in SQL Oracle

我有日期和一些值,我想对从第一个日期开始的 7 天周期内的值求和。

date         value
01-01-2021    1
02-01-2021    1
05-01-2021    1
07-01-2021    1

10-01-2021    1
12-01-2021    1
13-01-2021    1
16-01-2021    1

18-01-2021    1
22-01-2021    1
23-01-2021    1

30-01-2021    1

这是我的输入数据,有 4 个组,以查看哪些组将创建 7 天周期。 它应该从第一个日期开始,并在包含第一个日期后的 7 天内对所有值求和。 然后从第二天开始一个新组,再加上 7 天,从 10-01 到 17-01,然后再从 18-01 到 25-01 开始一个新组,依此类推。 所以输出将是

group1  4
group2  4
group3  3
group4  1

with match_recognize 很容易 current_day < first_day + 7 作为模式的条件,但请不要使用 match_recognize 子句作为解决方案!!!

一种方法是递归 CTE:

with tt as (
      select dte, value, row_number() over (order by dte) as seqnum
      from t
     ),
     cte (dte, value, seqnum, firstdte) as (
      select tt.dte, tt.value, tt.seqnum, tt.dte
      from tt
      where seqnum = 1
      union all
      select tt.dte, tt.value, tt.seqnum,
             (case when tt.dte < cte.firstdte + interval '7' day then cte.firstdte else tt.dte end)
      from cte join
           tt
           on tt.seqnum = cte.seqnum + 1
     )
select firstdte, sum(value)
from cte
group by firstdte
order by firstdte;

这按第一个日期标识组。如果你想要一个数字,你可以使用 row_number() over (order by firstdte)

Here 是一个 db<>fiddle.