SQLiteのWith句で再帰を使って日付のデータを生成する
SQLiteでイベントの発生を示すデータを集計したいとします。
単純に日付でgroup by
するとイベントが発生した日付のみでgroup化されたデータが集計され、日付が飛び飛びになってしまいますね?
こういうときに日付の一覧のデータとjoinすれば問題ないのですが、そのためにtabelやviewを作るのもな〜というときに今回のテクニックが使えます。
やりかた
例として2021年02月の日付一覧を生成します。
WITH RECURSIVE calendar(calendar_date) AS (
SELECT
-- ここが始まりの日付
DATE('2021-02-01') AS calendar_date
UNION ALL
-- UNION ALL 以下が再帰処理部分
SELECT
DATE(calendar_date, '+1 day') AS calendar_date
FROM calendar
WHERE
-- ここが終わりの日付
calendar_date < DATE('2021-02-28')
)
-- ここが実際のSELECT文
SELECT calendar_date FROM calendar;
calendar_date
は2021-02-01
から始まり、再帰的にselectが実行されるたびにcalendar_date
に+1day
されて、それが2021-02-28
まで続きます。その結果が全てUNION ALL
で連結されてcalendar
という一つのテーブルになります。
結果
これはRedash上の表示です。BIツール上などで日付の一覧を用意するのに便利ですね。
参考
Author And Source
この問題について(SQLiteのWith句で再帰を使って日付のデータを生成する), 我々は、より多くの情報をここで見つけました https://qiita.com/kazuhei/items/4949476e4bd25e96ed8c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .