MYSQL データベースから取得した結果を、タイムスタンプの時間ごとにグループ化したいと考えています。タイムスタンプは、形式でテーブルに格納されます2012-12-14 03:19:09
。クエリを使用します
SELECT
HOUR(`timestamp`) AS `hour`,
AVG(`somevalue`) AS `average`
FROM ...
GROUP BY
HOUR(`timestamp`),
DAY(`timestamp`),
MONTH(`timestamp`),
WEEK(`timestamp`),
YEAR(`timestamp`)
ORDER BY ...
LIMIT 0, 24;
これは機能し、正しい行と値を返します...
+------+-------+
| hour | value |
+------+-------+
| 13 | 21.16 |
| 12 | 21.11 |
| 11 | 20.88 |
| 10 | 20.93 |
| 9 | 20.87 |
| 8 | 20.89 |
| ... | ... |
+------+-------+
...しかし、非常に遅いです(テーブルには〜90k行が含まれています)。各日付エンティティでグループ化するのではなく、 でグループ化するようにアドバイスされましたUNIX_TIMESTAMP(`timestamp`)/3600
。残念ながら、これは望ましい結果にはつながりません。結果は次のようになります
+------+-------+
| hour | value |
+------+-------+
| 13 | 21.20 |
| 13 | 21.20 |
| 13 | 21.20 |
| 13 | 21.20 |
| 13 | 21.20 |
| ... | ... |
+------+-------+
それらを1つのグループ句のみでグループ化する方法はありますか(これにより高速になります)、正しい結果が返されますか?