В большинстве баз данных я бы, вероятно, выбрал:
select t.*
from t
where t.id = (select t2.id
from t t2
where t2.reservation = t.reservation and t2.date = t.date
order by t2.rank desc
fetch first 1 row only
);
Но я не думаю, что Teradata поддерживает такие конструкции. Если я предполагаю, что вы хотите самый высокий идентификатор, то:
select t.*
from t
where t.id = (select max(t2.id)
from t t2
where t2.reservation = t.reservation and t2.date = t.date
);
Или вы можете использовать qualify
:
select t.*
from t
qualify row_number() over (partition by reservation, date order by rank desc) = 1;
Использование row_number()
обеспечивает одну строку на reservation
/ date
, поэтому вы не получите дубликаты.