我在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
答案 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
的行。