如何从集合中获取最小值
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;
没有子查询或自连接你也可以使用这个:
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;
我有这个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;
没有子查询或自连接你也可以使用这个:
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;