背景
- 日別集計データの歯抜けを埋めるため、指定期間のすべての日付がほしい
- Postgresだと思ってGENERATE_SERIESを利用しようとしたがエラーが発生した
- 括弧の対応がとれていないエラー
考え方
- タイムリミットが3時間程度しかなかったので出来そうなことを組み合わせる
- SEQUENCE関数を利用して、指定期間のタイムスタンプの配列を生成
- 開始時刻のタイムスタンプを
TD_TIME_PARSE
を利用して生成 - 現在日時をタイムスタンプに変換した上でintにキャスト
- 第3引数に1日分の秒数を指定することで1日間隔のリストが作成される
- UNNESTを利用して、上記で作成した配列を行に変換する
- ただ、もっといい方法がいくらでもありそう
SELECT
TD_TIME_FORMAT(n, 'yyyyMMdd', 'JST') AS yyyymmdd
FROM (
SELECT n1
FROM (
VALUES
SEQUENCE(TD_TIME_PARSE('2016-09-27', 'JST'), CAST(TO_UNIXTIME(NOW()) as INTEGER), 60 * 60 * 24)
) AS x (n1)
) t1
CROSS JOIN UNNEST(n1) AS t (n);