1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| WITH recursive DateRange (D) AS ( select '20200101'::DATE union all select D::DATE + integer '1' from DateRange where D < '20201231'::DATE ) , DR as ( select extract(dow from d) dow , extract(week from d) WeekNum , To_Char(d, 'd') w , To_Char(d, 'dd') dd , To_Char(d, 'mm')::integer mm , d , sum(case when extract(dow from d) = 0 or To_Char(d, 'dd')::integer = 1 then 1 else 0 end) over(order by d) week_no from DateRange ) --select * --from DR select min(mm) themon , max(case when w::integer = 1 then To_Char(d, 'dd') else null end) sun , max(case when w::integer = 2 then To_Char(d, 'dd') else null end) mon , max(case when w::integer = 3 then To_Char(d, 'dd') else null end) tue , max(case when w::integer = 4 then To_Char(d, 'dd') else null end) wed , max(case when w::integer = 5 then To_Char(d, 'dd') else null end) thu , max(case when w::integer = 6 then To_Char(d, 'dd') else null end) fri , max(case when w::integer = 7 then To_Char(d, 'dd') else null end) sat from DR group by week_no order by week_no
|