当前位置:  开发笔记 > 数据库 > 正文

如何在SQL中找到重复的条目并删除最旧的条目?

如何解决《如何在SQL中找到重复的条目并删除最旧的条目?》经验,为你挑选了2个好方法。

我有一个表,除了一列中的一个值外,它们都是唯一的行(我们称之为'Name').另一列是'Date',它是添加到数据库的日期.

我想要做的是在"名称"中找到重复的值,然后删除"日期"中具有最早日期的那些,留下最新的日期.

看起来像一个相对简单的查询,但除了简单的查询,我对SQL知之甚少.

有任何想法吗?



1> dance2die..:

查找重复项并删除最旧的项

替代文字

这是守则

create table #Product (
    ID      int identity(1, 1) primary key,
    Name        varchar(800),
    DateAdded   datetime default getdate()
)

insert  #Product(Name) select 'Chocolate'
insert  #Product(Name,DateAdded) select 'Candy', GETDATE() + 1
insert  #Product(Name,DateAdded) select 'Chocolate', GETDATE() + 5
select * from #Product

;with Ranked as (
    select  ID, 
        dense_rank() 
        over (partition by Name order by DateAdded desc) as DupeCount
    from    #Product P
)
delete  R
from    Ranked R
where   R.DupeCount > 1

select * from #Product



2> 小智..:

从存在的表a1中删除(从表a2中选择*,其中a2.name = a1.name和a2.date> a1.date)

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有