2020-03-21

SQLで連続した日付のテーブルを生成する

SQLで連続した日付のテーブルを生成する方法。個人的メモ。

SELECT date_table.date
FROM
  (SELECT CURDATE() - INTERVAL seq_no DAY AS DATE
   FROM
     (SELECT @seq_no := 0 AS seq_no
      UNION SELECT @seq_no := @seq_no + 1 AS seq_no
      FROM information_schema.COLUMNS LIMIT 3660) tmp) date_table
WHERE date >= '2020-01-01'

「現在の日付から seq_no 日前の日付」を3660回(約10年分)UNION SELECT したうえで、WHERE 句で期間を指定する。

集計作業で10年以上さかのぼることは(個人的には)まずないので、とりあえずこれで期待通り動く。LOOP 構文も調べたがこのようなケースで使えるのかよく分かっていない…