MySQL, qui ne prend pas en charge les fonctions de la fenêtre, vous pouvez essayer ceci:
SELECT
t1.*,
t3.TeacherID AS last_teacher
FROM yourTable t1
INNER JOIN
(
SELECT studentID, MAX(LastSeen) AS max_last_seen
FROM yourTable
GROUP BY studentID
) t2
ON t1.studentID = t2.studentID
INNER JOIN yourTable t3
ON t2.studentID = t3.studentID AND
t2.max_last_seen = t3.LastSeen;
Utilisation des fonctions de la fenêtre, nous pouvons en finir avec l'une des jointures et de simplifier légèrement à ce qui suit:
SELECT
t1.StudentID,
t1.TeacherID,
t1.LastSeen,
t2.TeacherID AS last_teacher
FROM
(
SELECT StudentID, TeacherID, LastSeen,
MAX(LastSeen) OVER (PARTITION BY StudentID) AS max_last_seen
FROM yourTable
) t1
INNER JOIN yourTable t2
ON t1.StudentID = t2.StudentID AND
t1.max_last_seen = t2.LastSeen;
pls. tag SGBD (MySQL, MS SQL Server, Oracle, etc.) que vous utilisez. –
ajoutez quelques exemples de données et le résultat souhaité. –
Fonction de fenêtre de décalage si vous utilisez un dbms qui le supporte – GurV