我有一个称为CAL的表(该表包含每个客户帐户的注释)。在某个时候,导入过程每个acct_no添加了265个重复注释,在这里我需要删除每个acct_no除外的所有注释。
我能够拉出查询以找到重复项,但不知道如何删除每个acct_No的重复项,而每个acct_no至少保留1条记录
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 COUNT100224〜APPAACOLC 2019-04-23 11:35:00 APPAA电话:6463736300结果:左消息265100299〜APPAACOLC 2019-04-23 11:36:00 APPAA电话:6462793975结果:应答265100361〜APPAACOLC 2019-04-23 11:35:00 APPAA电话:9178863391结果:应答265100630〜APPAACOLC 2019-04-23 11:36:00 APPAA电话:5164663631结果:左消息电话:5166623996结果:答复265101546〜APPAACOLC 2019-04-23 11:37:00 APPAA电话:5163651466结果:应答265101809〜APPAACOLC 2019-04-23 11:37:00 APPAA电话:9176985008结果:应答265102239〜APPAACOLC 2019-04-23 11:37:00 APPAA电话:9174406128结果:左消息265
弄清楚了,这里是正确的代码:
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
)