【问题标题】:Delete multiple duplicates leaving max id in sql [duplicate]删除在sql中留下最大ID的多个重复项[重复]
【发布时间】:2017-06-18 22:26:36
【问题描述】:

我有一个包含大量重复项的数据库,每个都有一个唯一的ID,但它们的PermitIDEncID 是相同的。我需要删除数据库中除最高 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)

但我收到错误 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, &lt;, &lt;= , &gt;, &gt;= or when the subquery is used as an expression.

数据的一个例子是

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

我想保留 3,删除 2 和 1。我还想保留 5 并删除 4

【问题讨论】:

    标签: sql-server sql-server-2008 sql-delete


    【解决方案1】:

    保持简单。

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

    【讨论】:

    • 效果很好!谢谢
    【解决方案2】:

    我能够让它与当前的 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
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      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
      

      【讨论】:

        猜你喜欢
        • 2021-12-29
        • 2022-01-20
        • 1970-01-01
        • 2014-02-03
        • 2013-07-10
        • 2017-02-12
        • 2019-07-26
        • 2017-11-17
        相关资源
        最近更新 更多