我正在尝试从具有布局的表中的条目构建高分表
id(int) | username(varchar) | score(int) | modified (timestamp)
使用以下方法可以很好地为每个用户选择每天的最高分数:
SELECT id, username, MAX( score ) AS hiscore
FROM entries WHERE DATE( modified ) = CURDATE( )
我被卡住的地方是,在某些情况下,比赛可能会在同一天多次获得相同的分数,在这种情况下,我需要确保它总是最早被选中的,因为 2 个分数匹配将是第一个达到该分数的人获胜。
如果我的表格包含以下内容:
id | username | score | modified
________|___________________|____________|_____________________
1 | userA | 22 | 2014-01-22 08:00:14
2 | userB | 22 | 2014-01-22 12:26:06
3 | userA | 22 | 2014-01-22 16:13:22
4 | userB | 15 | 2014-01-22 18:49:01
本例中返回的中奖表应该是:
id | username | score | modified
________|___________________|____________|_____________________
1 | userA | 22 | 2014-01-22 08:00:14
2 | userB | 22 | 2014-01-22 12:26:06
我试图通过在查询中添加 ORDER BY modified desc
来实现这一点,但它总是返回较晚的分数。我也尝试了 ORDER BY modified asc
,但我得到了相同的结果
最佳答案
这是经典greatest-n-per-group问题,在 StackOverflow 上经常得到解答。这是针对您的情况的解决方案:
SELECT e.*
FROM entries e
JOIN (
SELECT DATE(modified) AS modified_date, MAX(score) AS score
FROM entries
GROUP BY modified_date
) t ON DATE(e.modified) = t.modified_date AND e.score = t.score
WHERE DATE(e.modified) = CURDATE()
关于mysql - 在 mysql : how can I select the most recently added row when selecting by MAX if two values are equal (application is a games high score table),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292354/