PostgreSQLで、先週分のデータを取得したい場合ありますよね?
例えば、単純に7日前〜昨日までとかでデータを取得すると、SQLを実行する日付によって変わってきてしまいます。
なので先週の日曜日から土曜日までを固定でデータを取りたいという場合の対応。
SELECT (now() + CAST('-' || (extract(dow from now()) + 7) || ' day' AS INTERVAL))::DATE;
まず上記で、今日の日付から、先週の日曜日のデータが取得できます。
※extractを使うと日曜日=0,月曜日=1というデータが取得でき、そこに7日を足した分を、頭の’-‘でマイナスを付けて引いています。
同様に、先週の土曜日のデータを取得する方法は以下になります
SELECT (now() + CAST('-' || (extract(dow from now()) + 1) || ' day' AS INTERVAL))::DATE;
単純に+7だったのを、+1に変えてあげればいいですね。
上記データを元に、実際の先週分を取得するSQLサンプルはこちら
SELECT 列名
FROM テーブル名
WHERE
created >= (SELECT (now() + CAST('-' || (extract(dow from now()) + 7) || ' day' AS INTERVAL))::DATE)
AND created < (SELECT (now() + CAST('-' || (extract(dow from now())) || ' day' AS INTERVAL))::DATE)
先週の土曜日までを取得したいのに、+1がなくなっているのは、「今週の日曜より小さいデータ」を取得して「先週分」とするためです。
以上です。自分もたまにしか使わず忘れてしまうので、誰かのご参考になれば!
0 件のコメント:
コメントを投稿