LEFT JOIN sur Max Value
Supposons que j'ai les deux tableaux suivants:
STUDENT
studentid lastname firstname
1 Smith John
2 Drew Nancy
STUDENT_STORY
studentid dateline storyid status
1 1328313600 10 2
1 1328313601 9 1
2 1328313602 14 2
2 1328313603 12 1
Maintenant, j'ai besoin d'une requête SQL qui permettrait de sélectionner chaque étudiant avec la dernière histoire de cet étudiant de l'étudiant l'histoire de la table.
J'essaye ceci:
SELECT s.*, ss.*
FROM student AS s
LEFT JOIN (
SELECT *
FROM student_story
WHERE student_story.studentid = s.studentid
ORDER BY dateline DESC LIMIT 1
) AS ss ON (ss.studentid = s.studentid)
Toutefois, cette requête ne fonctionne pas. Il se plaint s.studentid être un champ inconnu dans la clause where de la requête sub.
Veuillez indiquer comment je peux réaliser ce que je suis en train de faire.
Grâce.
source d'informationauteur akanevsky
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela:
Cette jointure devrait le faire:
GROUP BY
devrait prendre la dernière ligne, de sorte que la dernière histoire = dernière ligne, si elle ne fonctionne pas, essayez de:Je ne suis pas sûr à ce sujet, s'il vous plaît commentaire à la suite
Vous aurez besoin d'ajouter une auto et l'id unique sur chaque ligne sur student_story table.
puis vous permettra de distinguer entre eux. ( à supposer studentstory.nouvelle_id )
Une autre approche est de faire une
LEFT JOIN
avec unNOT EXISTS()
condition. Selon le scénario, ce qui peut donner un peu plus de souplesse; cependant, il sera également montrer les résultats si il y a deux entrées avec le mêmedateline
par étudiant: