SQLite의 With 절에서 재귀를 사용하여 날짜 데이터 생성

2527 단어 SQLsqlite
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_date2021-02-01 로 시작하고, 재귀적으로 select 가 실행될 때마다 calendar_date+1day 되고, 그것이 2021-02-28 까지 계속됩니다. 그 결과가 모두 UNION ALL 로 연결되어 calendar 라는 하나의 테이블이 됩니다.

결과





이것은 Redash의 표시입니다. BI 도구 등에서 날짜 목록을 준비하는 데 유용합니다.

참고


  • SELECT 문만으로 캘린더 데이터 만들기
  • The WITH Clause
  • 좋은 웹페이지 즐겨찾기