mysql - 无法选择没有重复项的最新记录

标签 mysql sql database greatest-n-per-group

我正在尝试选择所有学生的最新记录(我不想要学生过去的成绩,只想要他们最近的成绩)。目前,它只返回一个结果。

学生成绩表

╔════╤═══════╤═══════╤═════════════════════╗
║ id │ name  │ grade │ date_added          ║
╠════╪═══════╪═══════╪═════════════════════╣
║ 1  │ bob   │ 23    │ 2019-10-01 14:25:00 ║
╟────┼───────┼───────┼─────────────────────╢
║ 2  │ james │ 45    │ 2019-10-02 17:31:27 ║
╟────┼───────┼───────┼─────────────────────╢
║ 3  │ mike  │ 42    │ 2019-10-03 18:08:13 ║
╟────┼───────┼───────┼─────────────────────╢
║ 4  │ bob   │ 68    │ 2019-10-04 02:00:00 ║
╟────┼───────┼───────┼─────────────────────╢
║ 5  │ mike  │ 83    │ 2019-10-04 09:28:43 ║
╟────┼───────┼───────┼─────────────────────╢
║ 6  │ bob   │ 23    │ 2019-10-04 11:42:00 ║
╟────┼───────┼───────┼─────────────────────╢
║ 7  │ james │ 86    │ 2019-10-05 12:11:20 ║
╚════╧═══════╧═══════╧═════════════════════╝

我希望它返回什么

╔════╤═══════╤═══════╤═════════════════════╗
║ id │ name  │ grade │ date_added          ║
╠════╪═══════╪═══════╪═════════════════════╣
║ 5  │ mike  │ 83    │ 2019-10-04 09:28:43 ║
╟────┼───────┼───────┼─────────────────────╢
║ 6  │ bob   │ 23    │ 2019-10-04 11:42:00 ║
╟────┼───────┼───────┼─────────────────────╢
║ 7  │ james │ 86    │ 2019-10-05 12:11:20 ║
╚════╧═══════╧═══════╧═════════════════════╝

我的sql语句

SELECT id, DISTINCT name, grade, max(date_added)
FROM student_grade
ORDER BY date_added DESC

或者是向我返回此详细信息的有效方式。我对如何获得这个有点困惑。

最佳答案

使用子查询首先选择每个名称的最大 id,然后选择与此 id 相关的记录:

SELECT sg.*
FROM student_grade sg
     INNER JOIN (
          SELECT name, max(id) as id
          FROM student_grade
          GROUP BY name
    ) x ON x.name = sg.name AND x.id = sg.id

我假设 id 是查找最后添加的记录的正确字段。也许date_added会更正确,但如果它们具有相同的功能含义,使用id会更有效

关于mysql - 无法选择没有重复项的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248374/

相关文章:

javascript - 加号在 Google Apps Script + MySQL 中转换为空格

mysql - 如何从MySQL中非表格式的表中返回数据?

MySQL LEFT JOIN SUM 不包括 0

mysql - 如何在 MySQL 中优化此查询

php - 为什么我的 MySQL 查询失败

c++ - B 树中的指针

mysql - 我需要截断一个表然后插入新的寄存器,但用户看不到这个

mysql - DEFAULT 在 SET 数据中不起作用

sql - 如何使用 last_insert_rowid 插入多行?

sql-server - 删除 FK 行时可以更改外键 ID 吗?