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

问题描述

我有日期和一些值,我想对从第一个日期开始的 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

使用 match_recognize 将很容易 current_day

解决方法

一种方法是递归 CTE:

with tt as (
      select dte,value,row_number() over (order by dte) as seqnum
      from t
     ),cte (dte,seqnum,firstdte) as (
      select tt.dte,tt.value,tt.seqnum,tt.dte
      from tt
      where seqnum = 1
      union all
      select tt.dte,(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 是一个 dbfiddle。