Supposons que j'ai les deux tableaux suivants:LEFT JOIN sur Max Valeur
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, je besoin d'une requête SQL qui sélectionnerait chaque étudiant ainsi que la dernière histoire pour cet étudiant dans le tableau de l'histoire des étudiants.
Je suis en train 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)
Cependant, cette requête ne fonctionne pas. Il se plaint que s.studentid soit un champ inconnu dans la clause where de la sous-requête.
S'il vous plaît suggérer comment je peux réaliser ce que je suis en train de faire.
Merci.
Maintenant, quand je pense à ce sujet, cela pourrait revenir le même étudiant deux fois s'il y avait plusieurs entrées avec le même horodatage, donc ne l'utilisez probablement pas. – Detheroc
Cela ne devrait jamais être le cas, sauf si quelque chose ne va pas. Comment puis-je corriger cette requête afin qu'elle ne renvoie pas deux fois le même étudiant s'il y a plusieurs entrées avec le même horodatage? – akanevsky
Si les ID de la table student_story sont également susceptibles d'augmenter avec le temps, vous pouvez sélectionner et comparer l'ID maximum. Cela ne semble pas être le cas dans votre exemple, donc le problème est probablement assez délicat. La solution de Vyktor n'a-t-elle pas fonctionné? Cela semble tout à fait raisonnable. – Detheroc