Поиск, группировка и удаление дубликатов записей в MS SQL и сохранение самых старых - PullRequest
1 голос
/ 12 февраля 2020

У меня есть таблица, в которой хранятся записи банковского счета сотрудника. Есть дубликаты записей последней записи, созданной пользователем, которые были созданы в результате ежедневного выполнения задания.

Например: для Сотрудника E1 ниже приведены записи банковского счета в БД

Jan 1 2015 - Bank X
Jan 1 2018 - Bank Y
Jan 1 2020 - Bank X

Здесь несколько повторяющихся записей для Банка X и Y после каждого изменения вручную 1 января 2015 года, 18 и 20.

Теперь я должен удалить дубликаты записей, которые являются дубликатами в терминах значений столбцов "BankName "и" BankAccountNumber ".

Здесь в этом сценарии в системе должны оставаться все записи, которые обновляются 1 января 2015, 2018 и 2020 годов, даже если имя и номер счета совпадают для Банк X.

Столбцы, которые мы рассматриваем в таблице для подготовки сценария:

1. Recordid(Uniqueidentifier) primary key
2. Recordsequence(INT) Identity column by 1
3. EmployeeID(INT) <set of records are linked to an employee through  of employee table>.

Мой текущий Logi c предназначен для поиска дубликатов и удаления записей:

;WITH BARecords
AS (
    SELECT recordid
        ,ROW_NUMBER() OVER (
            PARTITION BY employeeID
            ,BankName
            ,AccountNumber ORDER BY recordsequence
            ) row_num
    FROM employeebankaccount WITH (NOLOCK)
    WHERE employeeid IN (
            SELECT Id
            FROM @EMPLOYEEIDs
            )
    )
DELETE
FROM BARecords
WHERE row_num > 1

Мои текущие логины c будут также удалять детали Банка X с 1 января 2020 года и сохранятся только с 1 января 2015 года. Поскольку пользователь обновил Банк X aga в том, что также должно остаться в системе дат создания 1 января 2020 года.

...