我有一个具有该结构的“user_score”表:
|id|user_id|group_id|score| timestamp |
| 1| 1| 1| 500| 2013-02-24 18:00:00|
| 2| 2| 1| 200| 2013-02-24 18:01:50|
| 3| 1| 2| 100| 2013-02-24 18:06:00|
| 4| 1| 1| 6000| 2013-02-24 18:07:30|
我需要做的是从该表中选择来自确切组的所有用户。选择他们在该组中的实际(根据时间戳)得分和排名。
我所拥有的是(编辑:在 Jocachin 发表评论后,我发现我自己的查询没有按预期工作,对所有人感到抱歉):
SELECT user_id, score, @curRank := @curRank + 1 AS rank
FROM (
SELECT *
FROM (
SELECT * FROM `user_score`
WHERE `group_id` = 1
ORDER BY `timestamp` DESC
) AS sub2
GROUP BY `user_id`
) AS sub, (SELECT @curRank := 0) r
ORDER BY `rank`
示例数据和 group_id = 1 的预期结果:
|user_id|score|rank|
| 1| 6000| 1|
| 2| 200| 2|
但是 MySQL 子选择有点问题,请问您还有其他解决方案吗?
稍后我可能需要在组中获得排名 od 单个用户。我现在迷路了。