2016-05-13 5 views
0

Ich habe eine Tabelle und muss die gesamte Zeile löschen, wo ID zweite und nachfolgende Male auftritt, aber lassen Sie das erste Auftreten von suCustomerIDBy den Weg. M-Tabelle hat ID, die ein Primärschlüssel und CustometID ist, die dupliziert wird. Also muss ich alle Zeilen mit duplizierten CustomerID entfernen.Löschen Sie IDs, die mehr als einmal wiederholen, aber das erste Vorkommen

Delete From Table1 where ID IN (select ID From Table1 where count(distinct CutomerID) >=2 group by CustomerID) 

Der obige Code wird alle ID einschließlich des ersten Auftretens von jedem der IDs löschen, aber ich brauche ihr erstes Auftreten zu halten. Bitte beraten.

+1

Do Sie haben eine andere Spalte, die einzigartig ist? –

+0

Woher wissen Sie, welches Ereignis zuerst auftritt? – Malk

+0

Ja, es gibt eine row_id, die ein primärer Schlüssel ist – enigma6205

Antwort

0

Dieser Code sollte Ihnen geben, was Sie brauchen.

Es kann bessere Möglichkeiten, es zu tun, wenn Sie das vollständige Tabellenschema für Table1

bieten können

Wenn Sie die Zeilennummer erhalten und dann einfach ignorieren die erste, die:

;WITH cte 
AS 
(
    SELECT ID, 
    ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS Rn 
    FROM [Table1] 
) 
DELETE cte WHERE Rn > 1 
+0

Vielen Dank. Ich werde versuchen, es zu meinem besonderen Bedarf zu adjizieren und wird Ihre Antwort akzeptieren – enigma6205

0
delete a from(
Select dense_rank() OVER(PARTITION BY id ORDER BY id) AS Rn,* 
from Table1)a 
where a.Rn>1 
+0

Obwohl dieser Code die Frage beantworten kann, bietet zusätzlichen Kontext in Bezug auf _why_ und/oder _how_ es antwortet die Frage würde erheblich verbessern seine langfristige Wert. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –

Verwandte Themen