一尘不染

生成给定月份的一系列周间隔

sql

在Postgres9.1数据库中,我试图为给定的月份生成一系列星期,但有一些限制。我需要所有的星期才能从星期一开始,而当它们在另一个月开始或结束时会被削减。

例子:

对于2013年2月,我想生成一个像这样的系列:

         start
------------------------
2013-02-01 00:00:00+00
2013-02-04 00:00:00+00
2013-02-11 00:00:00+00
2013-02-18 00:00:00+00
2013-02-25 00:00:00+00

我现在拥有的查询如下所示:

SELECT GREATEST(date_trunc('week', dates.d),
                date_trunc('month',dates.d)) as start
FROM generate_series(to_timestamp(1359676800),to_timestamp(1362095999), '1 week') as dates(d)

这个查询让我得到了前4周的信息,但是从25号开始缺少了一周。可以得到最后一周吗?


阅读 141

收藏
2021-03-17

共1个答案

一尘不染

select
greatest(date_trunc(‘week’, dates.d), date_trunc(‘month’,dates.d)) as start
from generate_series(‘2013-02-01’::date, ‘2013-02-28’, ‘1 day’) as dates(d)
group by 1
order by 1

2021-03-17