【发布时间】:2010-01-31 16:29:40
【问题描述】:
我有一个包含字段的表格(简化):
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 关键字
【问题讨论】:
-
HAVING出现在GROUP BY之后 -
9i,我想。是否有来自 DUAL 的 SELECT 版本?
-
尝试运行:
SELECT * FROM v$version WHERE banner LIKE 'Oracle%' -
啊,是的。
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production. -
Re: ORA-00923 错误,请尝试将
MAX(t.leg_id) 'max_id'替换为MAX(t.leg_id) AS max_id。不知道你在用什么,但我知道 Toad for Oracle 不喜欢用单引号来定义列别名。
标签: sql oracle duplicates oracle9i