34

重複の可能性:
Postgres でタイムスタンプを 5 分に切り詰める最速の方法は何ですか?
Postgresql SQL GROUP BY 任意の精度 (ミリ秒まで) の時間間隔

PostgreSQLで5分間隔でデータを集計したい。この関数を使用するdate_trunc()と、時間、月、日、週などの間隔でデータを集計できますが、5 分や 5 日などの特定の間隔では集計できません。

select date_trunc('hour', date1), count(*) from table1 group by 1;

PostgreSQL でこれを実現するにはどうすればよいでしょうか?

4

2 に答える 2

42
SELECT date_trunc('hour', date1) AS hour_stump
     , (extract(minute FROM date1)::int / 5) AS min5_slot
     , count(*)
FROM   table1
GROUP  BY 1, 2
ORDER  BY 1, 2;

GROUP BY時間に切り捨てられたタイムスタンプと 5 分スロットの 2 つの列を使用できます。

この例では、スロットが生成されます 0 - 11。必要に応じて追加1します1 - 12
の結果を整数にキャストするextract()ため、除算によって/ 5小数桁が切り捨てられます。結果:
分 0 - 4 -> スロット 0
分 5 - 9 -> スロット 1
など。

このクエリは、値が見つかった 5 分のスロットの値のみを返します。すべてのスロットの値が必要な場合、または5 分間のスロットの累計が必要な場合は、次の関連する回答を検討してください

于 2012-08-28T20:55:01.147 に答える
1

以下は、関数でラップするか、あちこちにカット アンド ペーストできる簡単なクエリです。

select now()::timestamp(0), (extract(epoch from now()::timestamptz(0)-date_trunc('d',now()))::int)/60;

現在の時刻と、0 から n-1 までの数値 (ここでは n=60) が表示されます。5 分ごとにするには、その数を 300 にします。1 日の開始からの秒単位でグループ化されます。年の始まり、時間の始まり、またはその他のものからの秒単位でグループ化するには、date_trunc の「d」を変更します。

于 2012-08-28T19:55:43.920 に答える