Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql中选择第一个非重复数据_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

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

如何在sql中选择第一个非重复数据,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我在sql中有tableId、名称和类型 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选择所有行而不是选择类型 select DISTINCT Type from tb

我在sql中有tableId、名称和类型

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选择所有行而不是选择类型

select DISTINCT Type
from tbltest

你可以用几种方法来做这件事。我的首选行号为:

编辑:

上述性能应合理。但是,使用类型id上的索引可能会加快以下速度:

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

我喜欢CTE和ROW_编号,因为它允许轻松更改以删除重复项

假定您要删除重复的类型,并根据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

所以你想删除重复的类型,并根据ID选择第一种方法?我想选择不重复的“类型”并按“ID”排序。@user3933292:是的,除非数据不是非常大,所以记录数不是数十亿,否则它是有效的。当然,您需要使用适当的索引。
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);
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