中生成一个月/周间隔的序列
我正在尝试按周生成一系列日期,从2013年3月1日00:00:00到2013年3月14日23:59:59。到目前为止,我的查询看起来像这样
SELECT GREATEST(date_trunc('week', dates.d),
date_trunc('month',dates.d)) as start
FROM generate_series(to_timestamp(1362096000),
to_timestamp(1363305599), '1 week') as dates(d)
输出: start
------------------------
2013-03-01 00:00:00+00
2013-03-04 00:00:00+00
查询部分有效,因为它返回前两周,但它缺少从2013年3月11日到2013年3月14日的一周。有没有办法得到最后一周,即使它还没有结束?
更快:
SELECT generate_series(date_trunc('week', '2013-03-01'::date + 6)
,date_trunc('week', '2013-03-14'::date)
,'1 week')::date AS day
UNION SELECT '2013-03-01'::date
ORDER BY 1;
详细说明请参见相关答案:
在Postgresql
您要求generate_series()
从3月1日午夜开始,正好在2周减1秒结束。
然而,在请求的时间间隔内,只能生成2个恰好间隔1周的值。如果您将间隔延长1秒,那么generate_series()
将生成第三行,您的查询将开始按预期工作- SQLFiddle demo:
SELECT GREATEST(
date_trunc('week', dates.d),
date_trunc('month',dates.d)) as start
FROM generate_series(
to_timestamp(1362096000),
to_timestamp(1363305599+1), '1 week') as dates(d)