我有日期和一些值,我想从第一个日期开始计算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<>小提琴