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)

标签 mysql sql join group-by greatest-n-per-group

我正在尝试从具有布局的表中的条目构建高分表

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,但我得到了相同的结果

最佳答案

这是经典问题,在 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/

相关文章:

mysql - Moodle数据库的多个表之间的条件连接

php - 使用 php 给下拉列表一个默认值

MySQL 查询 : GROUP BY without loosing rows in result

sql - EF Core - 删除列解决方法(sqlite)

mysql - SQL : Cartesian product + Join + Flatten

php - MySQL - 如何使用(LEFT)JOIN 通过一个表将两个表连接在一起?

MYSQL:列出代表不在加利福尼亚州的成员(member)的所有销售人员

mysql - 请问为什么 "ERROR 1235 (42000): This version of MySQL doesn' t还不支持 'LIMIT & IN/ALL/ANY/SOME subquery'”?

mysql - CodeIgniter:如何将具有一个名称和多个选择框的数据插入到第二个表中?

java - Ms Access SQL异常参数太少