2

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

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

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。

4

1 回答 1

2

您应该加入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
于 2019-10-03T09:22:26.247 回答