SQL:如何从重复行中选择第一条记录?

Posted

技术标签:

【中文标题】SQL:如何从重复行中选择第一条记录?【英文标题】:SQL:How to select the first record from duplicate rows? 【发布时间】:2018-09-03 15:01:33 【问题描述】:

在执行以下查询以查找重复项时

select * from (
select a.* ,count (*) over (partition by a.ID) as tot
from HREMP a 
) tt
where tt.tot >1

它返回 423 行,

我执行了另一个查询来查找不重复的记录

  select * from (
select a.* ,count (*) over (partition by a.ID) as tot
from HREMP a 
) tt
where tt.tot =1

返回 685 条记录

我发现 423 个重复项中有 196 个不同的记录 现在,如何从重复记录中选择第一条记录?

【问题讨论】:

如何判断哪个是第一条记录?按 HREMP_ID? 是的..@anonyXmous 【参考方案1】:
select distinct * 
from ( select a.*, count(*) over (partition by a.ID) as tot
       from HREMP a 
     ) tt
where tt.tot > 1

select * 
from ( select a.*
            , count(*)     over (partition by a.ID) as tot
            , row_number() over (partition by a.ID order by 1) as rn
       from HREMP a 
     ) tt
where tt.tot > 1 
and   tt.rn = 1

【讨论】:

我已经准备好进行第二次查询,但第一次查询让我感到非常惊讶,distinct * .. 谢谢你.. 你可以检查它是否回答了你的问题 我试了两次,但需要再等 4 分钟.. woaa 您不需要使用 count(*),因为 row_number() 也会在 ID 唯一的情况下分配值 1。 使用 DISTINCT 会降低执行性能。这可以通过使用 row_number() 之类的分析窗口函数来避免。

以上是关于SQL:如何从重复行中选择第一条记录?的主要内容,如果未能解决你的问题,请参考以下文章

SQL从重复行中只选择一行

有重复组时选择最后一组的第一条记录

从具有重复列值的集合中选择第一条记录 C#

sql根据某一个字段重复只取第一条数据

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

选择基于重复项的第一条记录[重复]