LoginSignup
10
8

More than 5 years have passed since last update.

prestoで指定日からクエリ実行日までの日付の一覧を取得する

Posted at

背景

  • 日別集計データの歯抜けを埋めるため、指定期間のすべての日付がほしい
  • Postgresだと思ってGENERATE_SERIESを利用しようとしたがエラーが発生した
    • 括弧の対応がとれていないエラー

考え方

  • タイムリミットが3時間程度しかなかったので出来そうなことを組み合わせる
  • SEQUENCE関数を利用して、指定期間のタイムスタンプの配列を生成
    1. 開始時刻のタイムスタンプをTD_TIME_PARSEを利用して生成
    2. 現在日時をタイムスタンプに変換した上でintにキャスト
    3. 第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);
10
8
1

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
10
8