删除查询以删除重复项并保留最新记录

时间:2015-03-12 03:53:23

标签: sql oracle

我有一个Oracle数据库,其中有一个表,让我们说“光环”

enter image description here

现在在此表中有不同的重复记录。我必须删除这些重复项。

如上图 Dsvsd Cvra 单一条目& 双重录入

删除重复项的逻辑是,最高(最大)Review_ID&如果记录没有重复项,例如单一条目,请保留它。现在我无法手动执行此任务,因为该表的记录数为84,000,并且有18,000个不同的记录。 如何使用查询?此任务的最佳方法是什么

这是预期的结果

enter image description here

4 个答案:

答案 0 :(得分:2)

以下是一种使用rowidrow_number排名功能删除重复项的方法:

delete from auro
where  rowid in
( select rwid
  from ( select rowid rwid,
                row_number() over ( partition by name
                                    order by review_id desc) rn
         from   auro
       ) t
  where  rn>1
)

答案 1 :(得分:1)

delete from aura where id not in (
select min(id) keep (dense_rank last order by review_id nulls first) 
from aura
group by name
)

答案 2 :(得分:-1)

在你的代码中尝试这个(请忽略语法错误,因为我是sql中的菜鸟) 选择名称AS n FROM auro HAVING count(name)> 1 开始   LOOP
    SELECT MAX(review_id),MIN(review_id)AS maxid,minid FROM auro HAVING name = n     删除来自auro     名称= n;     当maxid = minid时退出;   结束循环; END;

答案 3 :(得分:-1)

在你的代码中尝试这个(请忽略语法错误,因为我是sql中的菜鸟)SELECT name AS n FROM auro HAVING count(name)> 1 BEGIN LOOP SELECT MAX(review_id),MIN(review_id)AS maxid,minid FROM auro HAVING name = n DELETE FROM auro WHERE name = n;当maxid = minid时退出;结束循环; END