@ Новичок: вот как я это сделаю.
Select * from Table_01
Join
(Select MAX(TransDate) as LatestDate, TestID, status from Table_02
where TestID not in
(Select TestID from Table_02 where status = 0)
group by TestID, status) as latestTrans
on latestTrans.TestID = Table_01.TestID
order by latestTrans.LatestDate DESC
Средняя часть (строки 3-5) получает последнюю запись для каждого TestID (отфильтровывая те, которые вам не нужны) исоздает временную таблицу "latestTrans".Присоединение этого к исходному Table_01 дает вам все соответствующие столбцы Table_01 для каждой записи во временной таблице.
@ Ответ Raymund делает то же самое с немного другим синтаксисом.Я не уверен, какое решение будет работать лучше.Мой сценарий упрощает поддержку, так как оператор «group by» не будет расти, если вам нужно будет возвращать больше столбцов из Table_01, и легче добавить больше операторов объединения, если это необходимо.
ОБНОВЛЕНИЕ Я изменил скрипт, чтобы убрать любые TestID, где статус равен 0. Скрипт начинает казаться довольно сложным для на первый взгляд простой идеи, но это сложно, потому что вам нужно сгруппировать данные дважды, сначала по статусу, а затемпо TestID (чтобы получить MaxDate).
Примечание. Я снял проверку на статус = 1, предполагая, что все возможные значения для «статуса» равны 0 и 1. Вставьте обратно, если это не так.