概要
TreasureDataのクエリでWhere条件の期間を動的に取得したくて、日付の計算を調べて見た結果をメモしておく。
日付計算クエリ
SELECT
-- 今日
TD_TIME_FORMAT(
TD_DATE_TRUNC('day', TD_SCHEDULED_TIME(), 'JST'),
'yyyy-MM-dd HH:mm:ss',
'JST'
) as today,
-- 昨日
TD_TIME_FORMAT(
TD_DATE_TRUNC('day', TD_TIME_ADD(TD_SCHEDULED_TIME(), '-1d', 'JST'), 'JST'),
'yyyy-MM-dd HH:mm:ss',
'JST'
) as yesterday,
-- 今月1日
TD_TIME_FORMAT(
TD_DATE_TRUNC('month', TD_SCHEDULED_TIME(), 'JST'),
'yyyy-MM-dd HH:mm:ss',
'JST'
),
-- 先月1日
TD_TIME_FORMAT(
TD_DATE_TRUNC(
'month',
TD_TIME_ADD(TD_DATE_TRUNC('month', TD_SCHEDULED_TIME(), 'JST'), '-1d', 'JST'),
'JST'
),
'yyyy-MM-dd HH:mm:ss',
'JST'
) as pre_month,
-- 2ヶ月前の1日
TD_TIME_FORMAT(
TD_DATE_TRUNC(
'day',
TD_TIME_PARSE(
ADD_MONTHS(TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-01', 'JST'), -2),
'JST'
),
'JST'
),
'yyyy-MM-dd HH:mm:ss',
'JST'
) as pre_2month,
-- 3ヶ月前の1日
TD_TIME_FORMAT(
TD_DATE_TRUNC(
'day',
TD_TIME_PARSE(
ADD_MONTHS(TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-01', 'JST'), -3),
'JST'
),
'JST'
),
'yyyy-MM-dd HH:mm:ss',
'JST'
) as pre_3month,
-- 半年前の1日
TD_TIME_FORMAT(
TD_DATE_TRUNC(
'day',
TD_TIME_PARSE(
ADD_MONTHS(TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-01', 'JST'), -6),
'JST'
),
'JST'
),
'yyyy-MM-dd HH:mm:ss',
'JST'
) as pre_6month,
-- 1年前
TD_TIME_FORMAT(
TD_DATE_TRUNC('day', TD_TIME_ADD(TD_SCHEDULED_TIME(), '-365d', 'JST'), 'JST'),
'yyyy-MM-dd HH:mm:ss',
'JST'
) as pre_year
;