воскресенье, 19 мая 2019 г.

Удаление дублей из таблицы


Необходимо удалить задублированные строки в таблице. Задача более типична для 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);

Комментариев нет:

Отправить комментарий