時間範囲を5分間隔でグループ化
mySQLのコマンドでやりたいことがあるのですが、うまくいきません。
SELECT a.timestamp, name, count(b.name)
FROM time a, id b
WHERE a.user = b.user
AND a.id = b.id
AND b.name = 'John'
AND a.timestamp BETWEEN '2010-11-16 10:30:00' AND '2010-11-16 11:00:00'
GROUP BY a.timestamp
これは私の現在の出力ステートメントです。
timestamp name count(b.name)
------------------- ---- -------------
2010-11-16 10:32:22 John 2
2010-11-16 10:35:12 John 7
2010-11-16 10:36:34 John 1
2010-11-16 10:37:45 John 2
2010-11-16 10:48:26 John 8
2010-11-16 10:55:00 John 9
2010-11-16 10:58:08 John 2
どうすれば5分間隔の結果にグループ分けできますか?
次のような出力にしたいのですが
timestamp name count(b.name)
------------------- ---- -------------
2010-11-16 10:30:00 John 2
2010-11-16 10:35:00 John 10
2010-11-16 10:40:00 John 0
2010-11-16 10:45:00 John 8
2010-11-16 10:50:00 John 0
2010-11-16 10:55:00 John 11
81
10
これはすべてのインターバルで機能する。
**PostgreSQL***
postgres の場合、使用する方が簡単で正確であることがわかりました。
date_trunc。
のような機能:
「分」、「時間」、「日」などのさまざまな解像度を提供できます。.. date_truncまで。
むしろ、ラウンドの代わりに「GROUP BY UNIX_TIMESTAMP(time_stamp)DIV 300」を使用する必要があります(。./ 300)丸めのため、一部のレコードが2つのグループ化された結果セットにカウントされることがわかりました。
同じ問題に出くわしました。
分単位でグループ化するのは簡単であることがわかりました。 epoch を数秒単位で分けてから、丸めるか、床を使用して残りの乗車するだけです。 したがって、 5分で間隔を取得する場合は、 300秒を使用します。
。
< / code>。
クエリーは次のようなものになる:
おそらく、タイムスタンプをymd:HMに分割し、DIV 5を使って分単位を5分単位に分割する必要があるでしょう。
...そして、クライアントコードの出力をあなたの好きなように調整する。あるいは、別々のカラムを取得する代わりに、SQLの連結演算子を使用して日付文字列全体を構築することもできます。
...そしてそれをグループ化する
これはどうですか:
それでも必要かどうかはわかりません。
MySQLではおそらく正しいクエリが次のようになることがわかりました。
あなたの考えを教えてください。