使用 Oracle SQL 删除重复数据并保留最新记录不起作用

Delete duplicate data and keep the latest record using Oracle SQL not working

我有 VK_MODIFY table,我想通过 ORDERIDEXTORID 的组合删除所有重复数据,只保留最新的 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);

试试这个:

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);

根据您的架构(索引,....),可能会有更快的解决方案。

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

 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)

最佳做法是您的 table 中应该有一个主键字段,如果有,您可以使用此字段而不是 rowid。