首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除重复行,但保留最早的行(按日期条件)- SQL Server

删除重复行,但保留最早的行(按日期条件)- SQL Server
EN

Stack Overflow用户
提问于 2016-03-27 05:00:41
回答 4查看 4K关注 0票数 3

我有这个表和三个列(ID、Email、Last Update。

我想删除重复的电子邮件,但保留最后更新的行(按日期标准)。在本例中,aaa是重复的。它在2011年有1行,2014年有其他行。我只想保留2014年。

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

发布于 2016-03-27 05:37:50

在SQL Server中,您可以使用CTE执行DELETE

代码语言:javascript
复制
;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
票数 4
EN

Stack Overflow用户

发布于 2016-03-27 05:27:04

您没有告诉我们您使用的是哪种DBMS,但以下是ANSI SQL,应该可以在所有(现代)DBMS上运行:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2016-03-27 05:17:16

使用以下SQL语句:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36240844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档