我有 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);
下面是另一个例子,可以解决你的问题。
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。
试试这个。
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);
根据你的模式(索引,......),可能有更快的解决方案。