我有这个表和三列(ID,电子邮件,[最后更新]。
我想删除重复的电子邮件,但保留上次更新的行(按日期条件)。在此示例中,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
答案 0 :(得分:2)
在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
答案 1 :(得分:1)
使用以下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
根据需要。
答案 2 :(得分:1)
您没有告诉我们您使用的是哪个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
答案 3 :(得分:0)
删除电子邮件字段的重复记录:
DELETE a FROM MyTable a INNER JOIN (
SELECT Email, MAX([Last Update]) [Last Update]
FROM MyTable
GROUP BY Email
) b ON a.Email = b.Email AND a.[Last Update] <> b.[Last Update];