Прослушивание изменений в роутере Link

Я не видел ответов, которые используют общие выражения таблиц и функции окна. Это то, с чем мне легче всего работать.

DELETE FROM
 YourTable
WHERE
 ROWID IN
    (WITH Duplicates
          AS (SELECT
               ROWID RID, 
               ROW_NUMBER() 
               OVER(
               PARTITION BY First_Name, Last_Name, Birth_Date)
                  AS RN
               SUM(1)
               OVER(
               PARTITION BY First_Name, Last_Name, Birth_Date
               ORDER BY ROWID ROWS BETWEEN UNBOUNDED PRECEDING 
                                       AND UNBOUNDED FOLLOWING)
                   AS CNT
              FROM
               YourTable
              WHERE
               Load_Date IS NULL)
     SELECT
      RID
     FROM
      duplicates
     WHERE
      RN > 1);

Что следует отметить:

1) Мы проверяем только дублирование полей в предложении раздела.

2) Если у вас есть повод выбрать один дубликат над другими, вы можете использовать предложение order by, чтобы эта строка имела row_number () = 1

3) Вы можете изменить дубликат числа, сохраненный, изменив окончательное предложение where на «Where RN> N "с N> = 1 (я думал, что N = 0 удалит все строки с дубликатами, но просто удалит все строки).

4) Добавлено поле раздела Sum, запрос CTE который помечает каждую строку номерами строк в группе. Поэтому для выбора строк с дубликатами, включая первый элемент, используйте «WHERE cnt> 1».

0
задан Mat Nale 31 December 2018 в 14:42
поделиться