如何从集合中获取最小值

How to get min value from set

我有这个table:

Profile_id  Phase_id   order
30087853    30021628    525
30087853    30021635    523
30087853    30021673    122
30087853    30021703    521

从上面我想得到 profile_id 以及这个 phase_id,它具有最低的 order_num,所以结果将是这样的:

Profile_id  Phase_id   order
30087853    30021673    122

创建 TABLE #table(Profile_id INT, Phase_id INT, _order INT) 插入 #table(Profile_id , Phase_id , _order ) SELECT 30087853,30021628,525 联合所有 SELECT 30087853,30021635,523 联合所有 SELECT 30087853,30021673,122 联合所有 SELECT 30087853,30021703,521

SELECT * 来自#table T1 加入 ( SELECT Profile_id ProfileId, MIN(_order) [order] 来自#table 分组 Profile_id ) A ON T1.Profile_id = ProfileId AND T1._order = [order]

您没有指定您的 DBMS,所以这是标准的 SQL:

select profile_id, phase_id, "order"
from (
   select profile_id, phase_id, "order", 
          row_number() over (partition by profile_id order by "order") as rn
   from the_table
) t
where rn = 1;

在线示例:http://rextester.com/MAUV44954

没有子查询或自连接你也可以使用这个:

SELECT Profile_id, MIN("order") as "order", 
    MIN(Phase_id) KEEP (DENSE_RANK FIRST ORDER BY "order") AS Phase_id 
FROM your_table
GROUP BY Profile_id;