我已经广泛地寻找这个问题的答案。我正在使用 Microsoft SQL Server,假设我有一个如下所示的表:
+--------+---------+-------------+-------------+
| ID | NUMBER | COUNTRY | LANG |
+--------+---------+-------------+-------------+
| 1 | 3968 | UK | English |
| 2 | 3968 | Spain | Spanish |
| 3 | 3968 | USA | English |
| 4 | 1234 | Greece | Greek |
| 5 | 1234 | Italy | Italian |
我想执行一个查询,该查询仅选择唯一的“NUMBER”列(无论是第一行还是最后一行都不会打扰我)。所以这会给我:
+--------+---------+-------------+-------------+
| ID | NUMBER | COUNTRY | LANG |
+--------+---------+-------------+-------------+
| 1 | 3968 | UK | English |
| 4 | 1234 | Greece | Greek |
如何实现这一目标?
最佳答案
解决此类问题的一个非常典型的方法是使用 row_number()
:
select t.*
from (select t.*,
row_number() over (partition by number order by id) as seqnum
from t
) t
where seqnum = 1;
这比使用与最小 id 的比较更通用。例如,您可以使用 order by newid()
获得随机行。您可以使用 where seqnum <= 2
选择 2 行.
关于SQL-仅在一列上选择不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406069/