可能性のある複製:
Postgresでタイムスタンプを5分に切り捨てる最も速い方法は何ですか?
Postgresql SQL GROUP BY時間間隔(任意の精度(ミリ秒まで))
PostgreSQLで5分間隔でデータを集計したい。 date_trunc()
関数を使用すると、毎時、毎月、毎日、毎週などの間隔でデータを集計できますが、5分や5日間などの特定の間隔では集計できません。
select date_trunc('hour', date1), count(*) from table1 group by 1;
PostgreSQLでこれを実現する方法を知っている人はいますか?
どんな助けでもありがたいです。
_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:クエリの実行中の行数「分」
これは、関数でラップするか、すべての場所にカットアンドペーストできる単純なクエリです。
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」を変更します。