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的
这称为重复数据消除。你也可以在网上找到很多技术。这种技术的可能重复称为重复数据消除。你也会在网上找到很多技巧。可能是重复的