今日の日付を基準にデータの範囲絞るSQL書いてみた
データアナリティクス事業本部の荒木です。
Redshiftで日付でデータ絞るときの関数を使う機会があったのでまとめたいと思います。
関数
・今日の日付取得
SELECT GETDATE()
現在の日付の完全なタイムスタンプで取得することができます。
SELECT GETDATE(); |date | +--------------------------+ |2022-11-22 15:02:05.000 |
SELECT CURRENT_DATE
今日の日付を年、月、日で取得することができます。
SELECT CURRENT_DATE; |date | +-------------+ |2022-10-01 |
GETDATE()
で得たタイムスタンプをTRUNC()
と一緒に使用することで年、月、日だけに絞ることもできます。
SELECT TRUNC(GETDATE()); |date | +-------------+ |2022-10-01 |
・指定したdatepartに基づいて切り捨てられた日付取得
SELECT DATE_TRUNC('datepart', timestamp)
指定したdatepartによって切り捨てられたタイムスタンプを取得できます。
SELECT DATE_TRUNC('day', DATE'2022-11-22 15:02:05.000'); |date | +--------------------------+ |2022-11-22 00:00:00.000 |
・指定した日付部分のみを取得
SELECT DATE_PART(datepart, {date|timestamp})
指定したdatepartによって指定した日付の値を取得できます。
SELECT DATE_PART('day', DATE'2022-11-22 15:02:05.000'); |date | +-----+ |11 |
・指定した日付部分に値を加える
SELECT DATEADD(datepart, interval, {date|time|timetz|timestamp})
指定したdatepartによって指定した日付に値を加えることができます。
SELECT DATEADD('day', 10 , DATE'2022-11-22 15:02:05.000'); |date | +--------------------------+ |2022-12-02 00:00:00.000 |
サンプルコード
日付データを基準にデータ絞るコードを書いてみました。
月を指定したDATE_TRUNC
に今日の月を基準に6か月前から3か月前までを指定しています。
DATEADD
は負の値を指定することもできます。
日にちまで指定したければDATEADD
で指定した日数を指定することができます。
SELECT * from {schema}.{table} where date_col BETWEEN DATEADD('day', 10, DATEADD('mon', -6, DATE_TRUNC('mon', CURRENT_DATE))) and DATEADD('day', 10, DATEADD('mon', -3, DATE_TRUNC('mon', CURRENT_DATE)))
まとめ
実際に使った関数についてまとめてみました。
何かの参考になればと思います。