我有一个包含字段的表(简化):
id, fld1, fld2, fld3.
id
是一个数字主键字段。
有重复项:id
不同但fld1
,fld2
并且fld3
在 2 行或更多行上相同。当然,还有一些条目的值只出现一次,即不重复。
在每组重复条目中,我只想保留 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 关键字