2017-02-02 1 views
1

많은 양의 중복이 포함 된 데이터베이스가 있습니다. 각각 고유 한 ID이 있지만 PermitIDEncID은 동일합니다. 데이터베이스에서 가장 높은 ID를 제외한 모든 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)