Ik doe dit soort zoekopdrachten anders, met een exclusieve join in plaats van een subquery. U wilt de rijen van B vinden die de maximale tijd voor een bepaalde ID hebben; met andere woorden, waar geen enkele andere rij een grotere tijd en dezelfde ID heeft.
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
U kunt ook een afgeleide tabel gebruiken , die beter zou moeten presteren dan het gebruik van een gecorreleerde subquery.
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.:ik heb de greatest-n-per-group
. toegevoegd label. Dit type SQL-vraag verschijnt elke week op Stack Overflow, dus je kunt die tag volgen om tientallen vergelijkbare vragen en hun antwoorden te zien.