1
私は、作成した日付のレコードのテーブルを持っています。今月の部分を含め、過去6カ月ごとに新しいレコードを返信したいと思います。私はSQL Serverをよく知っていますが、PostgreSQLに精通していません。私はこのクエリと転がりヶ月のデータを取得することができたPostgreSQLで過去nヶ月間の新しいレコードを検索
:
select
COUNT(ID) as Total,
COUNT(CASE WHEN createddate between (now() - '1 month'::interval)::timestamp AND now() THEN AG.ID END) as ThisMonth,
COUNT(CASE WHEN createddate between (now() - '2 month'::interval)::timestamp AND (now() - '1 month'::interval)::timestamp THEN AG.ID END) as LastMonth,
COUNT(CASE WHEN createddate between (now() - '3 month'::interval)::timestamp AND (now() - '2 month'::interval)::timestamp THEN AG.ID END) as PrevMonth,
COUNT(CASE WHEN createddate between (now() - '4 month'::interval)::timestamp AND (now() - '3 month'::interval)::timestamp THEN AG.ID END) as PrevMonth2,
COUNT(CASE WHEN createddate between (now() - '5 month'::interval)::timestamp AND (now() - '4 month'::interval)::timestamp THEN AG.ID END) as PrevMonth3,
COUNT(CASE WHEN createddate between (now() - '6 month'::interval)::timestamp AND (now() - '5 month'::interval)::timestamp THEN AG.ID END) as PrevMonth4
FROM a_group AG
しかし、6月21日に、これは/ 4/22-5、5/22-6/21からのデータを返します。 21など
6/1-6/21(今月の部分的な月)、5/1-5/31などです。
どのような提案がありますか?私もループでこれを行うことができると思うが、構文にまだ慣れていない。今のところ、PostgreSQL Maestroからバックアップファイルに対してこれをテストしています。
ありがとうございました。
あなたは、トムそれを釘付け:あなたはこの私の推測のような何かをするだろう。それがまさに私が必要としていたものです。 – nycdan
私はこれを制御ループに入れたいので、より簡単にピリオドの数を変更できます。もし誰かがボーナスポイントを気にしていたら... :) – nycdan
あなたは必要な結果を得るために窓関数を使うことができます(http://www.postgresql.org/docs/current/static/tutorial-window.htmlを参照)。 )。たとえば、SELECT DISTINCT date_trunc( 'month'、createddate)をstart、count()で区切ります(PARTITION BY date_trunc( 'month'、createddate))FROM a_group; – Tom