在postgresql中生成序列时获得部分周



我正在尝试按周生成一系列日期,从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)

相关内容

  • 没有找到相关文章

最新更新