如何在sql中选择第一个非重复数据

时间:2014-08-12 12:12:14

标签: sql sql-server sql-server-2008-r2

我在sql中有表(Id,Name,Type)。

Id, Name, Type:
1, AA, 1
2, BB, 2
3, CC, 4
4, DD, 2
5, EE, 3
6, FF, 3

我想选择第一个非重复数据。结果:

Id, Name, Type:
1, AA, 1
2, BB, 2
3, CC, 4
6, FF, 3

我使用DISTINCT和GROUP BY,但没有工作,我选择所有行不选择带DISTINCT或GROUP BY的Type。

select DISTINCT Type
from tbltest

2 个答案:

答案 0 :(得分:1)

我喜欢CTE&{39}和ROW_NUMBER,因为它可以轻松更改它以删除重复项。

假设您要删除重复的Type,首先根据ID:

删除
WITH CTE AS(
   SELECT Id, Name, Type,
       RN = ROW_NUMBER() OVER ( PARTITION BY Type ORDER BY ID )
   FROM dbo.Table1
)
SELECT Id, Name, Type FROM CTE WHERE RN = 1

答案 1 :(得分:0)

您可以通过多种方式完成此操作。我的偏好是row_number()

select id, name, type
from (select t.*, row_number() over (partition by type order by id) as seqnum
      from tbltest t
     ) t
where seqnum = 1;

编辑:

以上表现应合理。但是,type, id上的索引可能会更快:

selct id, name, type
from tbltest t
where not exists (select 1 from tbltest t2 where t2.type = t.type and t2.id < t.id);

也就是说,为同一id选择没有低type的行。