Załóżmy, że mam dwie następujące tabele:LEFT JOIN na MAX wartość
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
Teraz muszę zapytanie SQL, które wybrać każdemu studentowi wraz z najnowszej historii dla tego studenta w tabeli historia studenta.
próbuję to:
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)
Jednak ta kwerenda nie działa. Narzeka, że s.studentid jest nieznanym polem w klauzuli where sub-zapytania.
Proszę zasugerować, w jaki sposób mogę osiągnąć to, co próbuję zrobić.
Dzięki.
Teraz, kiedy o tym myślę, to może wrócić tego samego ucznia dwa razy, gdyby nie było wiele wpisów z tym samym znacznikiem czasu, więc prawdopodobnie tego nie używaj. – Detheroc
Nigdy nie powinno tak być, chyba że coś jest nie tak. Jak naprawić to zapytanie, aby nie zwracał tego samego ucznia dwa razy, jeśli istnieje wiele wpisów o tym samym znaczniku czasu? – akanevsky
Jeśli liczba identyfikatorów w tabeli student_story również wzrasta z czasem, możesz zamiast tego wybrać i porównać maksymalny identyfikator. Nie wydaje się, że tak jest w twoim przykładzie, więc problem jest prawdopodobnie dość skomplikowany. Czy rozwiązanie Vyktora nie działało? Wydaje się to całkiem rozsądne. – Detheroc