sql - 为具有最低值的每个组选择单个 ID

Posted

技术标签:

【中文标题】sql - 为具有最低值的每个组选择单个 ID【英文标题】:sql - select single ID for each group with the lowest value 【发布时间】:2019-10-03 15:07:21 【问题描述】:

考虑下表:

ID      GroupId     Rank
1       1           1
2       1           2
3       1           1
4       2           10
5       2           1
6       3           1           
7       4           5

我需要一个 sql(用于 MS-SQL)选择查询,为每个排名最低的组选择一个 Id。每个组只需要返回一个 ID,即使有两个具有相同的排名(如上表中的 1 和 2)。我试图选择最小值,但是只返回一个,并且要返回的值是 ID 列的要求是抛出我。

有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

使用row_number():

select t.*
from (select t.*,
             row_number() over (partition by groupid order by rank) as seqnum
      from t
     ) t
where seqnum = 1;

【讨论】:

以上是关于sql - 为具有最低值的每个组选择单个 ID的主要内容,如果未能解决你的问题,请参考以下文章

根据可以具有值或为空的字段选择组内的行

为 SQL 连接选择单个(随机)行

如何编写 SQL 来选择具有每个组的最大值(值)的行?

从Oracle SQL中的每个组中选择具有最大值的行[重复]

一对多查询为每个父母选择所有父母和单个***孩子

从具有最低值的熊猫列中选择值