Удалить дубликаты для учетной записи НЕТ в SQL Диспетчер серверов - PullRequest
0 голосов
/ 28 января 2020

У меня есть таблица с именем CAL (это таблица, в которой хранятся заметки для каждой учетной записи клиента). В какой-то момент процесс импорта добавил 265 дубликатов заметок на acct_no, где мне нужно удалить все, кроме 1 на acct_no.

Я могу вытащить запрос, чтобы найти дубликаты, но не знаю, как удалить дубликаты за acct_No при сохранении как минимум 1 записи на acct_no

SELECT ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES, COUNT(*)
FROM PLSHARED.DBO.CAL
GROUP BY ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES
HAVING COUNT(*) > 10
ORDER BY ACCT_NO

Примеры результатов: ACCT_NO TYPE TIME_ADDED ADDED_BY NOTES COUNT 100224 ~ APPAACOL C 2019-04-23 11:35:00 APPAA телефон: 6463736300 результат : ЛЕВОЕ СООБЩЕНИЕ 265 100299 ~ APPAACOL C 2019-04-23 11:36:00 APPAA телефон: 6462793975 результат: ОТВЕТИТЬ 265 100361 ~ APPAACOL C 2019-04-23 11:35:00 APPAA телефон: 9178863391 результат: ОТВЕТ 265 100630 ~ APPAACOL C 2019-04-23 11:36:00 APPAA телефон: 5164663631 результат: ЛЕВОЕ СООБЩЕНИЕ телефон: 5166623996 результат: ОТВЕТ 265 101546 ~ APPAACOL C 2019-04-23 11:37:00 APPAA телефон: 5163651466 результат: ОТВЕТ 265 101809 ~ APPAACOL C 2019-04-23 11:37:00 APPAA телефон: 9176985008 результат: ОТВЕТ 265 102239 ~ APPAACOL C 2019-04-23 11:37:00 телефон APPAA : 9174406128 результат: ЛЕВОЕ СООБЩЕНИЕ 265

1 Ответ

0 голосов
/ 29 января 2020

разобрался, вот правильный код:

WITH Duplicates_CTE(ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES, U_INVNO, recno)
AS
(
 SELECT ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES, U_INVNO,Min(recno) recno
 FROM PLSHARED.DBO.cal
 GROUP BY ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES,U_INVNO
 HAVING Count(*) > 3)

DELETE FROM PLSHARED.DBO.cal
WHERE recno IN (
 SELECT cal.recno
 FROM PLSHARED.DBO.cal
 INNER JOIN Duplicates_CTE
 ON cal.ACCT_NO = Duplicates_CTE.ACCT_NO
 and cal.[TYPE] = Duplicates_CTE.[TYPE]
 and cal.DATE_ADDED = Duplicates_CTE.DATE_ADDED
 and cal.TIME_ADDED = Duplicates_CTE.TIME_ADDED
 and cal.ADDED_BY = Duplicates_CTE.ADDED_BY
 and cal.NOTES = Duplicates_CTE.NOTES
 and cal.U_INVNO = Duplicates_CTE.U_INVNO
 AND cal.recno <> Duplicates_CTE.recno
)
...