我有这个表和三个列(ID、Email、Last Update。
我想删除重复的电子邮件,但保留最后更新的行(按日期标准)。在本例中,aaa是重复的。它在2011年有1行,2014年有其他行。我只想保留2014年。
ID Email Last update
a-4 aaa 10/01/2011
b-1 bbb 10/02/2012
k-1 ccc 05/03/2013
d-9 aaa 10/08/2014
t-7 bbb 02/09/2015发布于 2016-03-27 05:37:50
在SQL Server中,您可以使用CTE执行DELETE
;WITH ToDelete AS (
SELECT ROW_NUMBER() OVER (PARTITION BY Email
ORDER BY [Last update] DESC) AS rn
FROM mytable
)
DELETE FROM ToDelete
WHERE rn > 1发布于 2016-03-27 05:27:04
您没有告诉我们您使用的是哪种DBMS,但以下是ANSI SQL,应该可以在所有(现代)DBMS上运行:
delete from the_table
where exists (select id
from the_table t2
where t2.email = the_table.email
and t2.id <> the_table.id
and t2.last_update > the_table.last_update);SQLFiddle:http://sqlfiddle.com/#!15/ca442/1
发布于 2016-03-27 05:17:16
使用以下SQL语句:
SELECT First(ID) AS Id, First(Email) AS Email, Max([Last update]) AS LastUpd
FROM YourTable
GROUP BY Email
ORDER BY Max([Last update]) DESC;必要时使用MAKE TABLE。
https://stackoverflow.com/questions/36240844
复制相似问题