SQL:选择一列的不同而忽略其他列

时间:2011-11-07 23:46:23

标签: mysql sql sql-server-2005 sql-server-2008 tsql

所以我有一张这样的表:

---------
id, keyid
---------
1,  3
1,  5
1,  6
2,  1
2,  1
2,  3
4,  1

I want the output of the query to be
1,3
2,1
4,1

如果我在表中使用select distinct(id,keyid),它会在id,keyid对上应用distinct,而不仅仅是id。

2 个答案:

答案 0 :(得分:13)

select id, min(keyid) from tbl group by id

答案 1 :(得分:1)

如果你想要每个Id的KeyId的最小值,那么user194076的答案肯定会有效。

如果您希望每个Id的第一个出现的KeyId值,您可以使用:


WITH CTE AS (
   SELECT Id, KeyId, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS RN
   FROM tbl
)

SELECT Id, KeyId FROM CTE WHERE RN = 1

我使用STATISTICS IOSTATISTICS TIME进行了测试,但它们在性能方面似乎相同,所以实际上取决于您的确切需求。