Удалите повторяющиеся данные и сохраните последнюю запись, используя Oracle SQL не работает - PullRequest
0 голосов
/ 18 июня 2020

У меня есть таблица 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);

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вот еще один пример, который может решить вашу проблему.

 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 голос
/ 18 июня 2020

Попробуйте следующее:

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

В зависимости от вашей схемы (индексы, ....) могут быть более быстрые решения.

...