Sql 删除重复的最大记录除外

Sql 删除重复的最大记录除外,sql,sql-server,Sql,Sql Server,我有如下表格格式 Item_Txn Item_Name 101 Mouse 102 Mouse 103 Mouse 104 Keyboard 105 CPU 106 Monitor 107 Monitor 我想删除除max Item_Txn之外的重复项目。例如,鼠标重复3次。我想删除除103鼠标外的鼠标记录。尝试以下操作: DEL

我有如下表格格式

Item_Txn       Item_Name
101            Mouse
102            Mouse
103            Mouse
104            Keyboard
105            CPU
106            Monitor
107            Monitor
我想删除除max Item_Txn之外的重复项目。例如,鼠标重复3次。我想删除除103鼠标外的鼠标记录。

尝试以下操作:

DELETE a
FROM   my_table a
WHERE  EXISTS (SELECT *
               FROM   my_table b
               WHERE  a.Item_Name = b.Item_Name
                 AND  b.Item_Txn > a.Item_Txn);
DELETE  FROM MyTable
WHERE   Item_Txn IN (
    SELECT  K.Item_Txn
    FROM    ( SELECT    Item_Txn ,
                        ROW_NUMBER() OVER ( PARTITION BY Item_Name ORDER BY Item_Txn DESC ) AS RN
              FROM      MyTable
            ) AS K
    WHERE   K.RN > 1 );
试试这个:

DELETE  FROM MyTable
WHERE   Item_Txn IN (
    SELECT  K.Item_Txn
    FROM    ( SELECT    Item_Txn ,
                        ROW_NUMBER() OVER ( PARTITION BY Item_Name ORDER BY Item_Txn DESC ) AS RN
              FROM      MyTable
            ) AS K
    WHERE   K.RN > 1 );

对于SQL Server 2008及更新版本:

;WITH cte AS
(
    SELECT      Item_Txn, Item_Name,
                ROW_NUMBER() OVER (PARTITION BY Item_Name ORDER BY Item_Txn DESC) AS RowNumber
    FROM        my_table
)

DELETE FROM cte
    WHERE RowNumber > 1

对于SQL Server 2008及更新版本:

;WITH cte AS
(
    SELECT      Item_Txn, Item_Name,
                ROW_NUMBER() OVER (PARTITION BY Item_Name ORDER BY Item_Txn DESC) AS RowNumber
    FROM        my_table
)

DELETE FROM cte
    WHERE RowNumber > 1
试试这个

delete from table 
where Item_Txn not in
         (select max(Item_Txn) from table group by Item_Name)
试试这个

delete from table 
where Item_Txn not in
         (select max(Item_Txn) from table group by Item_Name)
该查询将只剩下:

103 Mouse
104 Keyboard
105 CPU
107 Monitor
该查询将只剩下:

103 Mouse
104 Keyboard
105 CPU
107 Monitor

您可以使用中间子查询来完成此操作

    DELETE FROM `table`
    WHERE id NOT IN (
      SELECT id
      FROM (
        SELECT id
        FROM `table`
        ORDER BY id DESC
        LIMIT 1 -- keep this many records
      ) foo
    );
上面是MySQL的

这是针对SQL的


您可以使用中间子查询来完成此操作

    DELETE FROM `table`
    WHERE id NOT IN (
      SELECT id
      FROM (
        SELECT id
        FROM `table`
        ORDER BY id DESC
        LIMIT 1 -- keep this many records
      ) foo
    );
上面是MySQL的

这是针对SQL的


这称为重复数据消除。你也可以在网上找到很多技术。这种技术的可能重复称为重复数据消除。你也会在网上找到很多技巧。可能是重复的