SQL:选择一个列的不同值,同时忽略其他列

7

我有一个类似于以下表格的表:

---------
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) from table,它会将 distinct 应用于 id 和 keyid 的组合,而不仅仅是单独的 id。

2个回答

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

3
这是正确的方向。通常来说,至少理解这种思考方式要比到处随意应用不同的方法要好得多。 - stefan

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 进行了测试,它们在性能方面似乎是相同的,所以真正取决于您的确切需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接