次のようなサンプル データを含む MySql テーブルがあります。
+---------+---------+--------+---------------------+
| id | user_id | scores | created_at |
+---------+---------+--------+---------------------+
| 1 | 1 | 10 | 2012-12-14 02:40:37 |
| 2 | 1 | 20 | 2012-12-14 02:55:54 |
| 3 | 1 | 10 | 2012-12-14 01:17:21 |
| 4 | 2 | 30 | 2012-12-13 01:54:47 |
| 5 | 2 | 55 | 2012-12-15 00:34:39 |
| 6 | 2 | 10 | 2012-12-14 00:20:21 |
+---------+---------+--------+---------------------+
そして、スコアがユーザーごと、時間ごとに合計されるように、クエリを実行する必要があります。ここでの 1 時間はcreated_at
、分と秒をスキップしたものと見なされます (04:00:00 から 04:59:59 など)。だから、このようなもの:
+---------+--------+---------------------+
| user_id | scores | created_at |
+---------+--------+---------------------+
| 1 | 30 | 2012-12-14 02:00:00 |
| 1 | 10 | 2012-12-14 01:00:00 |
| 2 | 30 | 2012-12-13 01:00:00 |
| 2 | 55 | 2012-12-15 00:00:00 |
| 2 | 10 | 2012-12-14 00:00:00 |
+---------+--------+---------------------+
このサンプル データでは、最初のユーザーのみが 1 時間 (2012-12-14 02:00:00) に複数回プレイしたため、その時間のスコアが合計されました。
合計スコアから、各ユーザーのトップ スコアのみが必要です (ランクを作成するため)。したがって、最終的に期待される結果は次のようになります。
+---------+---------------------+---------------------+
| user_id | top_scores_per_hour | hour |
+---------+---------------------+---------------------+
| 1 | 30 | 2012-12-14 02:00:00 |
| 2 | 55 | 2012-12-15 00:00:00 |
+---------+---------------------+---------------------+
これの一部を行う方法についてのアイデアがあります...データベースの外で残りを処理することはできますが、本当に疑問に思います-これをSQLでクエリするにはどうすればよいですか?