2

我正在使用以下 JOIN 语句:

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

检索学生列表 (students2014) 和存储在 (notes2014) 中的每个学生的相应笔记。

每个学生在 notes2014 表中都有多个笔记,每个笔记都有一个与每个学生的唯一 ID 对应的 ID。上面的语句返回了一个学生列表,但复制了每个有多个笔记的学生。我只想显示每个学生的最新笔记(由最高笔记 ID 确定)。

这可能吗?

4

2 回答 2

4

您需要根据您从选择中获得的 MAX 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 的事实是一个很大的代码气味。使用学生表和年份字段会更好,原因有很多(只是几个:您不需要每年更改数据库结构,跨年份查询要容易得多,等等) . 也许你“继承”了这一点,但我想我会提到它。

于 2013-10-24T15:20:42.323 回答
1

按 studentId 对查询进行分组并选择 noteId 的 MAX

尝试 :

SELECT 
students2014.Student,
IFNULL(MAX(NoteId),0)
FROM students2014 
LEFT JOIN notes2014 ON (students2014.Student = notes2014.NoteStudent) 
WHERE students2014.Consultant='$Consultant'
GROUP BY students2014.Student 
    ORDER BY students2014.LastName
于 2013-10-24T14:19:51.630 回答