Необходимо удалить задублированные строки в таблице. Задача более типична
для Warehousing (OLAP), чем OLTP.
Для определения дубликатов используем функцию row_number().
Уникальность строк в нижеследующем примере будем определятя по значениям в
колонках skp_client и contact. Это не означает, что в таблице есть уникальный индекс по этим двум колонкам. Сортируем задублированные строки по колонке
change_time в обратном порядке, самые последние строки стоят на первом месте.
Решение:
DELETE FROM owner_dwh.ft_pilot_skill trg
WHERE
trg.rowid IN
(SELECT src.rowid
FROM
(SELECT /*+ parallel(8)
*/
ROWID,
row_number() over(PARTITION BY skp_client, contact
ORDER BY change_time DESC)
rn
FROM
owner_dwh.ft_pilot_skill t) src
WHERE
rn >
1);
Комментариев нет:
Отправить комментарий