Jeg udfører denne type forespørgsel anderledes med et ekskluderingsjoin i stedet for en underforespørgsel. Du vil finde rækkerne af B, som har den maksimale tid for et givet ID; med andre ord, hvor ingen anden række har en større Tid og samme ID.
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL
Du kan også bruge en afledt tabel , som burde yde bedre end at bruge en korreleret underforespørgsel.
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
ON (B.ID, B.Time) = (B2.ID, B2.Time)
P.S.:Jeg har tilføjet den greatest-n-per-group
tag. Denne type SQL-spørgsmål dukker op hver uge på Stack Overflow, så du kan følge det tag for at se dusinvis af lignende spørgsmål og deres svar.