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_recognition将是容易的current_day

一种方法是递归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)

这是一个db<>小提琴

相关内容

  • 没有找到相关文章

最新更新