/ / Usuń duplikaty wpisów sql na podstawie odrębnego klucza głównego - sql, sql-server, distinct, sql-delete

Usuń zduplikowane wpisy sql na podstawie odrębnego klucza głównego - sql, sql-server, distinct, sql-delete

Mam tę tabelę z 3 kolumnami: ID, nazwa konta i klucz podstawowy. Niektóre wpisy zostały zduplikowane, gdy identyfikator i nazwa konta są takie same, ale PK (który jest kluczem podstawowym) został zwiększony.

Chciałbym móc usunąć wszystkie zduplikowane wpisy Z WYJĄTKIEM dla jednego z najniższym PK (kluczem podstawowym).

Oto przykład wyników z zapytania, które napisałem, aby pobrać tylko te dane:

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

Widzę więc wszystkie zduplikowane wpisy i ich odrębne klucze podstawowe, w jaki sposób mogę usunąć wszystkie z wyjątkiem najniższego klucza głównego z tabeli?

Odpowiedzi:

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