Bạn có thể sử dụng generate_series()
để tránh CTE phức tạp và số học ngày tháng. Đây là một ví dụ để bạn bắt đầu:
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
Bạn sẽ muốn thêm một trường hợp vào học kỳ thứ hai để loại bỏ bất cứ điều gì trong năm 2017 và nó có thể được viết lại để từng bước một tuần, nhưng nó sẽ giúp bạn đi đúng hướng.