select setseed(1);
create table vals as
select dates,
date_trunc('day', dates) as days,
extract(isodow from dates) as dow,
round(random()*5) as num
from generate_series(timestamp '2022-07-28', '2022-08-09', '6 hours') s(dates);
select *
from vals
order by dates;
select distinct
days,
case when dow in (6, 7) then 0
when dow = 1 then sum(num) over(order by days range between '2 days' preceding and '0 days' following)
else sum(num) over(partition by days)
end as sum_num
from vals
order by days