使用oracle sql删除重复数据并保留最新记录无效

332nm8kg  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(570)

我有 VK_MODIFY 表中我要删除的所有重复数据的组合 ORDERID 以及 EXTORID 只保留最新的 SYSTEM_INSERTED_AT .
[![在此处输入图像描述][1]][1]
我尝试了以下查询,但无法正常工作:

DELETE FROM VK_MODIFY a
WHERE rowid not in
(SELECT min(rowid)
FROM VK_MODIFY b
where a.ORDERID = b.ORDERID and a.EXTORID = b.EXTORID);
hgc7kmma

hgc7kmma1#

这是另一个可以解决你问题的例子。

DELETE FROM VK_MODIFY WHERE ROWID IN(SELECT TEMP.ROWID FROM(
SELECT ROWID,ORDERID, EXTORID, SYSTEM_INSERTED_AT,
ROW_NUMBER()OVER (PARTITION BY ORDERID,EXTORID ORDER BY SYSTEM_INSERTED_AT DESC) RN  FROM VK_MODIFY
)TEMP
WHERE TEMP.RN <> 1)

最佳实践是在表中应该有一个主键字段,如果有,可以使用此字段而不是rowid。

h43kikqp

h43kikqp2#

试试这个:

DELETE FROM VK_MODIFY a
WHERE SYSTEM_INSERTED_AT not in
(SELECT max(SYSTEM_INSERTED_AT)
FROM VK_MODIFY b
where a.ORDERID = b.ORDERID and a.EXTORID = b.EXTORID);

根据您的模式(索引等),可能有更快的解决方案。

相关问题