2017-02-02 4 views
1

Ich habe eine Datenbank, die zahlreiche Mengen von Duplikaten enthält, jeder hat eine eindeutige ID, aber ihre PermitID und EncID sind gleich. Ich muss alle außer der höchsten ID in der Datenbank entfernen.Lösche mehrere Duplikate mit maximaler ID in sql

Die SQL-Anweisung,

DELETE FROM tblInvoices 
WHERE EncID = '0237' AND PermitID IN (
SELECT Max(ID) FROM tblInvoices Group BY PermitID) 

löscht alle Datensätze. Ich habe versucht,

DELETE FROM tblInvoices 
WHERE EncID = '0237' AND PermitID 
< (SELECT Max(ID) FROM tblInvoices Group BY PermitID) 

aber ich erhalte den Fehler Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Ein Beispiel für die Daten

ID PermitID EncID 
1  11   22 
2  11   22 
3  11   22 
4  12   23 
5  12   23 

I 3 wäre halten wollen, entfernen Sie 2 und 1. Ich würde auch mag 5 behalten und entfernen 4

Antwort

0

Ich konnte es mit der aktuellen SQL-Anweisung

arbeiten
WITH CTE AS 
(
    SELECT ROW_NUMBER() OVER (Partition BY PermitID ORDER BY ID) AS RowNumber, * 
    FROM tblInvoices 
    WHERE EncID = '0237' 
) 

DELETE FROM CTE 
WHERE RowNumber < 13 
0

Sie können dies versuchen:

WITH cte AS 
( 
SELECT row_number() OVER (PARTITION by permitid ORDER BY Id DESC) r,ID,permitid,encid 
FROM tblinvoices  
) 
DELETE FROM cte WHERE r > 1 
2

Keep it simple.

DELETE FROM tblInvoices 
WHERE ID NOT IN 
    (SELECT MAX(ID) 
    FROM tblInvoices 
    GROUP BY EncID, PermitID) 
Verwandte Themen