2013-03-15 26 views
1

我試圖從2013年3月1日起在2013年3月1日的00:00:00至23:59:59之間生成一系列日期。我直到現在查詢看起來像這樣在postgresql中生成系列時獲取部分星期

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 

查詢部分的工作,因爲它返回的前兩個星期,你可以看到,但它缺少的一週三月11,2013年到2013年3月14日。即使尚未結束,上週有什麼辦法嗎?

回答

3

更快:

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; 

有關詳細說明看到相關的答案:
Generate series of a month by week interval in Postgresql

1

你問generate_series()從3月1日午夜開始,完成2周減1秒。

但是,在請求的時間間隔內,只能生成恰好相隔1周的2個值。如果您只是1秒延長你的時間間隔,然後generate_series()將產生第3行,你希望你的查詢將開始工作 - 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)