我正在尝试选择所有学生的最新记录(我不想要学生过去的成绩,只想要他们最近的成绩)。目前,它只返回一个结果。
学生成绩表
╔════╤═══════╤═══════╤═════════════════════╗
║ 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/