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 という名前のテーブルというのは、大きなコードのにおいがします。多くの理由で、学生テーブルと年フィールドを使用した方がはるかに優れています(ほんの2、3:DB構造を毎年変更する必要がない、年をまたがるクエリがはるかに簡単になるなど) . おそらくあなたはこれを「継承」しましたが、私はそれについて言及したいと思いました。

于 2013-10-24T15:20:42.323 に答える
1

クエリを StudentId でグループ化し、noteId の最大値を選択します

試す :

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 に答える