Edited at

#PostgreSQL で指定期間の連続した日付を生成する

More than 3 years have passed since last update.


例:2015年1月1日から今日までの日付を生成する場合

SELECT *

FROM generate_series('2015-01-01'::date, CURRENT_DATE, '1 day')



  • 2015-01-01 00:00:00+092015-05-26 00:00:00+09の日付が出来た。

generate_series

2015-01-01 00:00:00+09
2015-01-02 00:00:00+09


2015-05-25 00:00:00+09
2015-05-26 00:00:00+09


COUNT(*)して無い日は「0」とするような集計に用いた


  • 日付ごとにコメントが何件あるか数え、コメントの無い日は「0」とするような場合に用いた。

SELECT DATE(a.*) AS date, COALESCE(b.cnt, 0)

FROM generate_series('2015-01-01'::date, CURRENT_DATE, '1 day') AS a
LEFT JOIN (
SELECT DATE(created) AS date, COUNT(*) AS cnt
FROM comments
WHERE created >= '2015-01-01 00:00:00'
GROUP BY date
) AS b ON (a.date = b.date)