web-dev-qa-db-ja.com

PostgreSQLのdate_trunc 5分間隔

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

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

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

PostgreSQLでこれを実現する方法を知っている人はいますか?

どんな助けでもありがたいです。

25
prateekk
_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;
_

2つの列を_GROUP BY_することができます。タイムスタンプは1時間に切り捨てられ、5分のスロットになります。

この例では、スロット_0 - 11_を生成します。 _1_を使用する場合は、_1 - 12_を追加します。
extract() の結果を整数にキャストするため、除算_/ 5_は小数桁を切り捨てます。結果:
分0-4->スロット0
分5-9->スロット1
等。

このクエリは、値が見つかった5分のスロットの値のみを返します。 everyスロットの値が必要な場合、または実行合計が必要な場合)5分以上のスロットでは、次の関連する回答を検討してください。
PostgreSQL:クエリの実行中の行数「分」

28

これは、関数でラップするか、すべての場所にカットアンドペーストできる単純なクエリです。

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

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

0
Scott Marlowe