删除sql中的重复记录

Posted

技术标签:

【中文标题】删除sql中的重复记录【英文标题】:Remove duplicated record in sql 【发布时间】:2021-02-13 06:02:55 【问题描述】:

我要做的是获取如下所示的记录:

ID  NAME    STARTDATE   ENDDATE EnrollmentMonth
1   PETER   20190101    20200729    20200701    
1   TONY    20200730    99991231    20200701

并将其更改为如下所示:

ID  NAME    STARTDATE   ENDDATE EnrollmentMonth
1   PETER   20190101    20200729    20200701    

除去注册天数较少的名字,Peter 在 7 月注册了 29 天,而 Tony 在 7 月注册了 2 天。

我们的想法是在 7 月只选择一个名字。

我很难完成这项工作。任何帮助将不胜感激。

谢谢

【问题讨论】:

您是否按用户 ID 执行此操作?每个月还是仅注册月份?你试过什么?你的结果是什么? 我感觉自己很蠢。有了这些数据,Tony 注册了 2 天是怎么回事?我根本不明白这里的数学。 7月入学。 【参考方案1】:

如果您只想要一条注册天数最少的 7 月记录,您可以使用日期算术,order byfetch first

select *
from mytable
where enrollmentmonth = date '2020-07-01'
order by least(enddate, date '2020-07-31') - greatest(startdate, '2020-07-01')
fetch first row with ties

我们可以使用窗口函数按月实现相同的逻辑:

select *
from (
    select t.*, 
        rank() over(
            partition by enrollmentmonth 
            order by least(enddate, last_day(enrollmentmonth)) - greatest(startdate, trunc(enrollmentmonth, 'month'))
        ) rn
    from mytable t
) t
where rn = 1

【讨论】:

应该是date '2020-07-01'

以上是关于删除sql中的重复记录的主要内容,如果未能解决你的问题,请参考以下文章

删除sql视图中的重复记录

求sql语句,只修改重复数据中的一条记录

怎么删除ACCESS中的重复记录 只保留一条

sql 删除SQL Server中的重复记录只保留一个

几个删除重复记录的SQL语句

如何在一定时间后自动删除sql server中的记录[重复]