2017-07-14 11 views
0

私は過去3ヶ月間のデータを取得できるSQLクエリを作成しようとしています。具体的には、各顧客が過去3ヶ月間にどのくらいの額を費やしたかを確認したい。私の日付フィールドはタイムゾーン付きのタイムスタンプです(例:2017-07-14 00:56:43.833191 + 00 ")。最後のx月からデータを取得する方法Postgres Sqlクエリの日付フィールドはタイムスタンプですか?

私は過去90日間のデータを取得しようとしていませんが、現在、2017年7月14日の場合は、2017年4月1日から2017年6月30日までの間にデータを取得したいと考えています。

ここ3ヶ月が同じ年現在の日付が2017年2月15日であれば、2016年11月1日から2017年1月31日までのデータを返すことを希望します。

私の現在の質問です。何か助けていただきありがとうございます。ありがとう!

select sum(amount), customer_id 
from payments 
where (date_part('month',payment_date) < (date_part('month',current_timestamp)-1) and 
     date_part('month',payment_date) >= (date_part('month',current_timestamp)-3)) and 
     (date_part('year',date_created) = date_part('year',current_timestamp)) 
group by customer_id 

答えて

2

Hmmm。 。 。私はdate_trunc()がずっと簡単だと思う:

select sum(amount), customer_id 
from payments 
where payment_date >= date_trunc('month', now()) - interval '3 month' and 
     payment_date < date_trunc('month', now()) 
group by customer_id; 
+0

素晴らしい - 魅力的なように働いた。 2016年11月に正常に戻るかどうかを確認するためにnow()をdate '2017-02-15'に変更してテストしました。ありがとうございました!! – Jacob

+0

btw、これが許可されているか、別の質問を作成する必要があるかどうかはわかりませんが、フォローアップはどうすれば合計金額> 5かの結果のみを表示できますか?私がしようとすると、where節に集計関数を持つことができないというエラーが発生します。ありがとう! :) – Jacob

+0

@Jacob。 。 。厳密に言えばそれは別の質問であるべきですが、答えは「合計(量)> 5」です。 –

関連する問題