背景
SQLを書いていると「月次で集計したいけど、元となる日付のテーブル日付のテーブルがない!」といったケースに当たることは多いかと思われます。ネットで調べると「任意の巨大テーブルを使って...」と言った記事もあったのですが、今回関数だけで作る方法を見つけたのでメモ的に残しておこうと思います。
作りたいもの
SQL
WITH
month AS (
SELECT
d
FROM
UNNEST(GENERATE_DATE_ARRAY(DATE_ADD(DATE_TRUNC(CURRENT_DATE, month), INTERVAL -5 MONTH),DATE_TRUNC(CURRENT_DATE, month), INTERVAL 1 MONTH)) AS d)
SELECT
*
FROM
month
感想
何かしらテーブルをもとに作成する方法は気持ち悪さがあったので、関数のみで作成することができ気持ち悪さを除くことができました。UNNESTは使うことはあまりないですがこういうケースで便利ですね!