我有一个 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 |
+---------+---------+--------+---------------------+
我需要查询它,以便按用户和每小时计算分数。这里假设一小时是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 |
+---------+--------+---------------------+
在这个示例数据中,只有第一个用户在一小时内(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 查询这个?