LoginSignup
16
17

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-26

例: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)
16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17