generate_series()
を使用できます 複雑なCTEと日付の計算を回避するため。開始するための例を次に示します。
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
2017年に何かを取り除くために、第2学期にケースを追加することをお勧めします。これは、一度に1週間ずつステップするように書き直すことができますが、正しい方向に進むはずです。