添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
博学的紫菜  ·  Upgrade from 1.29.1 ...·  6 天前    · 
留胡子的打火机  ·  Urbackup Server ...·  6 天前    · 
有腹肌的烤红薯  ·  LevelDB vs. RocksDB ...·  3 天前    · 
温文尔雅的小蝌蚪  ·  Mercury A1cn - ...·  2 周前    · 
乖乖的蜡烛  ·  View Source·  2 月前    · 
跑龙套的葡萄酒  ·  Google Play ...·  4 月前    · 
4
5

More than 3 years have passed since last update.

SQLiteのWith句で再帰を使って日付のデータを生成する

Posted at

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ツール上などで日付の一覧を用意するのに便利ですね。

  • SELECT文だけでカレンダーデータを作成する
  • The WITH Clause
  • 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
    5