我使用以下连接语句:

SELECT *
FROM students2014
JOIN notes2014 ON (students2014.Student = notes2014.NoteStudent)
WHERE students2014.Consultant='$Consultant'
ORDER BY students2014.LastName

检索学生列表(students2014)和存储在中的每个学生的相应注释(notes2014)。
每个学生在notes2014表中有多个注释,每个注释都有一个与每个学生的唯一ID相对应的ID。上面的语句返回一个学生列表,但是复制了每个有多个注释的学生。我只想显示每个学生的最新笔记(由最高笔记ID决定)。
这可能吗?

最佳答案

您需要另一个基于您从选择中获得的最大noteId的连接。
类似这样的操作应该可以完成(未测试;下一次我建议您使用表结构和一些示例数据粘贴到http://sqlfiddle.com/的链接。

SELECT *
FROM students s
LEFT JOIN (
    SELECT MAX(NoteId) max_id, NoteStudent
    FROM notes
    GROUP BY NoteStudent
) aux ON aux.NoteStudent = s.Student
LEFT JOIN notes n2 ON aux.max_id = n2.NoteId

如果我可以这么说的话,一个表被称为students2014的事实是一个很大的代码气味。有一个students表和一个year字段会更好,原因有很多(只有两个:您不需要每年都更改数据库结构,跨年查询要简单得多,等等)。也许你“继承”了这个,但我想我应该提一下。

10-05 21:37