LoginSignup
1
0

More than 5 years have passed since last update.

TreasureDataのクエリでtimestamp値を含む週の月曜日を計算する

Posted at

メモ。やりたいことはタイトルの通り。

前提

  • timeカラムにbigint型で入っているunix timestamp値を、それを含む週の月曜の日付文字列(yyyy-MM-dd)に変換する
  • 週は月曜日始まりとする
  • 日付は日本のタイムゾーンで計算する

PrestoのDOW関数とTreasureDataのTD_TIME_FORMAT関数を使う方法があるがどちらにしても長くなってしまった。
もっとスマートに書く方法があれば知りたい。

-- DOW()を使用
TD_TIME_FORMAT(time - 86400 * (DOW(FROM_UNIXTIME(time) AT TIME ZONE 'Asia/Tokyo') - 1), 'yyyy-MM-dd', 'jst')

-- TD_TIME_FORMAT()を使用
TD_TIME_FORMAT(time - 86400 * (CAST(TD_TIME_FORMAT(time, 'u', 'jst') AS integer) - 1), 'yyyy-MM-dd', 'jst')

やってることはどちらも同じで、

  1. timeを曜日の番号(月曜を1とする)に変換
  2. 月曜までの差の日数分だけtimeからtimestamp値を引く
  3. TD_TIME_FORMATで日付に変換
1
0
0

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
1
0