У меня есть таблица с полями (упрощенно):
id, fld1, fld2, fld3.
id
- числовое поле первичного ключа.
Есть дубликаты: id
отличается, но fld1
, fld2
и fld3
идентичны для 2 или более строк. Существуют также записи, в которых значения встречаются только один раз, то есть, конечно, не дублируются.
Из каждого набора повторяющихся записей я хочу сохранить только запись с самым высоким идентификатором. Я планировал сначала перечислить обреченные строки, а затем удалить их.
Мой первый удар был следующим:
SELECT * FROM tab1 t1 WHERE EXISTS (
SELECT COUNT(*) FROM tab1 t2
WHERE t1.fld1 = t2.fld1 AND t1.fld2 = t2.fld2 AND t1.fld3 = t2.fld3
AND t1.id < MAX(t2.id)
HAVING COUNT(*) > 1
GROUP BY t2.fld1, t2.fld2, t2.fld3)
Но (в Oracle) я получаю сообщение об ошибке Missing right parenthesis
. Я думаю, что для этого нужен новый подход, но мой SQL-фу не справляется с этой задачей. Помощь оценена!
Edit:
С «реальными» полями данных:
select x.leg_id, x.airline_des, x.flight_nr, x.suffix, x.flight_id_date, x.lt_flight_id_date
from fdb_leg x
join ( select max(t.leg_id) 'max_id',
t.airline_des, t.flight_nr, t.suffix, t.flight_id_date, t.lt_flight_id_date
from fdb_leg t
group by t.airline_des, t.flight_nr, t.suffix, t.flight_id_date, t.lt_flight_id_date
having count(*) > 1) y on y.max_id > x.leg_id
and y.airline_des = x.airline_des and y.flight_nr = x.flight_nr and y.suffix = x.suffix
and y.flight_id_date = x.flight_id_date and x.lt_flight_id_date = y.lt_flight_id_date
Ответ:
ORA-00923: ключевое слово FROM не найдено там, где ожидается