Аз правя този тип заявка по различен начин, с свързване за изключване вместо подзаявка. Искате да намерите редовете на B, които имат максималното време за даден 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
Можете също да използвате изведена таблица , което трябва да работи по-добре от използването на корелирана подзаявка.
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.:Добавих greatest-n-per-group
етикет. Този тип SQL въпроси се появяват всяка седмица в Stack Overflow, така че можете да следвате този етикет, за да видите десетки подобни въпроси и техните отговори.