Ответ 1
Я делаю этот тип запроса по-разному, с исключающим соединением вместо подзапроса. Вы хотите найти строки B, которые имеют максимальное время для данного идентификатора; другими словами, если ни одна другая строка не имеет большего значения времени и того же идентификатора.
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, поэтому вы можете следить за этим тегом, чтобы увидеть десятки подобных вопросов и их ответы.