2017-02-02 7 views
1

重複した重複量を含むデータベースがあり、それぞれ固有のIDがありますが、PermitIDEncIDは同じです。私はデータベース内の最も高いIDを除くすべてを削除する必要があります。複数の重複を削除してSQLの最大IDを残す

SQL文、

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

は、すべてのレコードを削除します。私は

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

を試してみましたが、私は、データの例は、

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

が、私は3を維持したいと思うことが2を削除して、1。私も希望でしょう Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

エラーが表示されます5を残して4を削除したいのですが

答えて

0

私は現在のSQL文

で動作させることができました
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

あなたはこれを試すことができます。

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

はそれをシンプルに保ちます。

DELETE FROM tblInvoices 
WHERE ID NOT IN 
    (SELECT MAX(ID) 
    FROM tblInvoices 
    GROUP BY EncID, PermitID) 
関連する問題