フィールドを持つテーブルがあります(簡略化):
id, fld1, fld2, fld3.
id
数値の主キー フィールドです。
重複があります:id
異なりますがfld1
、fld2
およびfld3
2 つ以上の行で同一です。もちろん、値が 1 回だけ発生するエントリ、つまり重複しないエントリもあります。
重複するエントリの各セットのうち、最も高い ID を持つエントリのみを保持したいと考えています。最初に運命の行をリストしてから削除することを計画していました。
私の最初の刺し傷はこれでした:
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-fuはそのタスクに対応していません。助けてください!
編集:
「実際の」データ フィールドの場合:
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 キーワードが予期された場所に見つかりませんでした