SQL Сервер Удалить дубликаты - PullRequest
0 голосов
/ 11 июля 2020

У меня есть таблица, в которой отслеживаются сотрудники и дни, которые они провели в политике. Я не генерирую эти данные, они сбрасываются на наш сервер ежедневно.

Таблица выглядит так:

Сотрудников

Моя цель - избавиться от дубликатов, сохранив только самую последнюю дату. В этом примере, если я запускаю запрос, я хотел бы, чтобы он сохранил строки 11 для Николаса Морриса и 14 для Тианы Салливан.

Предположение: комбинация имени и фамилии уникальна

Итак далеко, Это то, что я делал:

select *
from 
Employees IN(
    Select ID
    from Employees
    group by FirstName, lastName
    Having count(*) > 1)

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

Я уверен, что есть способ лучше. Спасибо за вашу помощь

Ответы [ 3 ]

1 голос
/ 11 июля 2020

Для этого можно использовать функции CTE и ROW_NUMBER ().

Запрос на получение данных:

SELECT ID, FirstName, LastName, ROW_NUMBER() 
     OVER (PARTITION BY FirstName, LastName ORDER BY DaysInPolicy DESC) AS Identifier
FROM 
   Employees

Запрос на удаление дубликатов:

;WITH CTE AS (
     SELECT ID, ROW_NUMBER() 
     OVER (PARTITION BY FirstName, LastName ORDER BY DaysInPolicy DESC) AS Identifier
FROM 
   Employees
)
DELETE E
FROM 
   Employees E
   INNER JOIN CTE C ON C.ID = E.ID
WHERE 
   C.Identifier > 1
0 голосов
/ 11 июля 2020

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

SELECT * FROM 
(   
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Last_Name, First_Nmae ORDER BY DaysInPolicy DESC) AS RowNum 
    FROM Employees
) AS Emp
WHERE Emp.RowNum > 1
0 голосов
/ 11 июля 2020

Вы можете удалить, используя оператор exists, где вы удаляете любую строку с тем же именем и фамилией, но с более новой датой:

DELETE FROM employees e1
WHERE  EXISTS (SELECT *
               FROM   employees e2
               WHERE  e1.FirstName    = e2.FirstName AND
                      e1.LastName     = e2.LastName  AND
                      e1.DaysInPolicy < e2.DaysInPolicy)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...