Du kan använda generate_series()
för att undvika den invecklade CTE- och datumaritmetiken. Här är ett exempel för att komma igång:
select d, d + interval '6 days'
from generate_series('2016-01-01'::date, '2016-12-31'::date, '1 day'::interval) d
where date_trunc('week', d) = d
Du vill lägga till ett fall under den andra terminen för att ta bort vad som helst under 2017, och det kan skrivas om till ett steg en vecka i taget, men det borde få dig på rätt spår.