根据不同的主键删除重复的sql条目

时间:2014-06-12 16:17:05

标签: sql sql-server distinct sql-delete

我的这个表有3列:ID,帐户名和主键。某些条目已被复制,其中ID和帐户名称相同但PK(它是主键)已递增。

我希望能够删除PK(主键)最低的所有重复条目除外。

以下是我编写的用于检索此数据的查询结果的示例:

ID          Account Name            PK
18380        _srvSQL               1724
18380        _srvSQL               8454
18380        _srvSQL              10333
18380        _srvSQL               9903
18380        _srvSQL              10274
20993        _svc_MOSS_search      2595
20993        _svc_MOSS_search      9235
21020        _svc_MOSS_WSS         2589
21020        _svc_MOSS_WSS         9244
22251        _SVC_QA_SP_PortalAP   3659
22251        _SVC_QA_SP_PortalAP   9590
22681        _Svc_SQL_AS_Prod      4269
22681        _Svc_SQL_AS_Prod      9678
20136        _svcBIAdmin           1628
20136        _svcBIAdmin          11080
20136        _svcBIAdmin           8913
18456        _svcBizTalk           9923
18456        _svcBizTalk          10294
18456        _svcBizTalk          10353

因此,我可以看到所有重复的条目及其不同的主键,如何从表中删除除主键最低的所有条目之外的所有条目?

1 个答案:

答案 0 :(得分:3)

WITH t AS (SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY PK) n FROM MyTable)
DELETE FROM t WHERE n > 1