By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table t as
select date '2021-01-01' as dte, 1 as value from dual union all
select date '2021-01-02' as dte, 1 as value from dual union all
select date '2021-01-05' as dte, 1 as value from dual union all
select date '2021-01-07' as dte, 1 as value from dual union all
select date '2021-01-10' as dte, 1 as value from dual union all
select date '2021-01-12' as dte, 1 as value from dual union all
select date '2021-01-13' as dte, 1 as value from dual union all
select date '2021-01-16' as dte, 1 as value from dual union all
select date '2021-01-18' as dte, 1 as value from dual union all
select date '2021-01-22' as dte, 1 as value from dual union all
select date '2021-01-23' as dte, 1 as value from dual union all
select date '2021-01-30' as dte, 1 as value from dual
12 rows affected
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
FIRSTDTE | SUM(VALUE) |
---|---|
01-JAN-21 | 4 |
10-JAN-21 | 4 |
18-JAN-21 | 3 |
30-JAN-21 | 1 |