使用Oracle SQL删除重复的数据并保留最新的记录,但却无法正常工作

问题描述 投票:0回答:2

我有 VK_MODIFY 表,我想通过组合删除所有重复的数据。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);
sql oracle duplicates sql-delete
2个回答
2
投票

下面是另一个例子,可以解决你的问题。

 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。


1
投票

试试这个。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.