TreasureDataで今月の1日を取得する


概要

データ抽出で1年間とかをする場合、今月の1日を取得してそこからマイナス365日の期間を取得するようにしたかったので調べた内容を記載しておきます。

今月の1日の取得方法

下記のようにしたら取得できました。

SELECT
  TD_TIME_FORMAT(
    TD_DATE_TRUNC('month', TD_SCHEDULED_TIME()),
    'yyyy-MM-dd',
    'JST'
  )
;

結果

2018-04-01

今月1日から365日マイナスした期間を取得する

SELECT
  -- 開始日(今月1日からマイナス365日した日付)
  TD_TIME_FORMAT(
    TD_TIME_ADD(TD_DATE_TRUNC('month', TD_SCHEDULED_TIME()), '-365d'),
    'yyyy-MM-dd',
    'JST'
  ) AS s,
  -- 終了日(今月1日)
  TD_TIME_FORMAT(
    TD_DATE_TRUNC('month', TD_SCHEDULED_TIME()),
    'yyyy-MM-dd',
    'JST'
  ) AS e
;

結果

| s          | e          |
| 2017-04-01 | 2018-04-01 |

先月の末日から365日マイナスした期間をWHERE条件に指定する

「2018/04/24 PM12:00」で実行すると 「2017-04-01 <= time < 2018-04-01」の期間が取得できます。
※ TD_TIME_RANGEは、開始日は含むが終了日は含まないため、今月1日を指定すると先月末日までとなる。

SELECT
  MIN(time) AS min,
  MAX(time) AS max
FROM
  hoge
WHERE
  TD_TIME_RANGE(
    -- 判定対象カラム
    time, 
    -- 開始日(今月1日からマイナス365日した日付)
    TD_TIME_ADD(TD_DATE_TRUNC('month', TD_SCHEDULED_TIME()), '-365d'),
    -- 終了日(今月1日) ※期間には含まれない
    TD_DATE_TRUNC('month', TD_SCHEDULED_TIME())
  )
;

以上です。

参考サイト