если по какой-либо причине у вас могут быть пробелы в данных (возможно, более детальные разбивки по сравнению с неделями), вы можете сгенерировать набор пользовательских недель и присоединиться к ним:
drop table if exists sales_weeks;
create table sales_weeks as
with
dates as (
select generate_series('2019-01-01'::date,current_date,interval '1 day')::date as date
)
,week_ids as (
select
date
,sum(case when extract('dow' from date)=5 then 1 else 0 end) over (order by date) as week_id
from dates
)
select
week_id
,min(date) as week_start_date
,max(date) as week_end_date
from week_ids
group by 1
order by 1
;