Удаление дубликатов с использованием раздела с помощью SQL Server - PullRequest
6 голосов
/ 03 февраля 2012

Мне нужно удалить дубликаты из таблицы:

;WITH cte as(
SELECT ROW_NUMBER() OVER (PARTITION BY [specimen id]
                                       ORDER BY ( SELECT 0 ) ) RN
         FROM   quicklabdump)
        delete from cte where RN>1

Столбец quicklabdumpID является первичным ключом.

Я хотел бы знать, как сохранить только самое большое quicklabdumpID где есть несколько случаев [specimen id]

Ответы [ 2 ]

17 голосов
/ 03 февраля 2012

Измените ваш заказ на quicklabdumpid DESC.

WITH cte as(
  SELECT ROW_NUMBER() OVER (PARTITION BY [specimen id]
                            ORDER BY  quicklabdumpid DESC ) RN
  FROM   quicklabdump)
delete from cte where RN>1
5 голосов
/ 03 февраля 2012

Нет необходимости в разделе

delete q
  from quicklabdump q
  where exists
  (
    select *
      from quicklabdump q2
      where q2.[specimen id] = q.[specimen id] and
        q2.quicklabdumpID > q.quicklabdumpID
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...