Различные движки баз данных по-разному получают верхнюю строку из таблицы 2 для каждой группы (вы можете поискать «функции окон SQL» и ваш продукт в Google).Поскольку вы не указываете, какой движок вы используете, невозможно дать наиболее подходящее или наиболее производительное решение.
Следующий метод должен работать в большинстве или во всех движках SQL, но не будет особенно производительным при большихнабор данных (для него будет полезен составной индекс Table2 (идентификатор, дата)).Детали того, как вы указываете псевдонимы для таблиц, могут немного отличаться для разных движков, но вы можете использовать это как руководство.Решение оконной функции, вероятно, будет более эффективным.
SELECT ID, Name, VisitID, Date FROM Table1 T1 INNER JOIN Table2 T2 +
ON T1.ID = T2.ID
WHERE NOT EXISTS (SELECT * FROM Table2 T2B WHERE T2B.ID = T1.ID AND T2B.Date > T2.Date)