首页 > 解决方案 > 试图选择最大列学年

问题描述

我正在尝试遵循这个问题的答案。

但是它对我不起作用,我不明白为什么。

SELECT h.*
FROM `student-history` h
LEFT OUTER JOIN `student-history` h2 ON h.id = h2.id AND h.`school-year` < h2.`school-year`
WHERE 
h2.id IS NULL

我的 SQL 与 Adrian 在他的回答中的几乎完全相同,但它没有产生相同的结果。基本上,该student-history表有一个tinyint(1)名为的列school-year,通常是 1-3 之间的数字。每个用户可以有多个条目。所以我想找到最高的年份行。

我不完全理解他的回答,所以我真的无法继续前进,但如果有人可以帮助我了解我哪里出错了,那就太好了。

如果我添加到WHERE上述语句中的子句以按用户缩小范围,例如AND h.userID = 54,我仍然会得到三行学生在场的所有三年。LEFT OUTER JOIN似乎根本没有什么不同。

我在这里创建了一个 SQL Fiddle。

标签: mysqlsqlleft-joingreatest-n-per-groupsql-null

解决方案


您应该加入userID而不是id. 除此之外,您的查询很好。

SELECT h.*
FROM `student-history` h
LEFT OUTER JOIN `student-history` h2 ON h.userID = h2.userID AND h.`school-year` < h2.`school-year`
WHERE 
h2.id IS NULL

推荐阅读