为每个id选择行最小col

时间:2015-12-11 11:54:50

标签: sql

我有一个如下表

id    id_a    id_b    uds
--------------------------
1      1        3      20
1      2        8      17
2      1        3       5
3      1        1      32
3      2        1       6

我需要的是用最少的" uds"为每个" id"。结果将是:

id    id_a    id_b    uds
--------------------------
1      2        8      17
2      1        3       5
3      2        1       6

提前谢谢你......

4 个答案:

答案 0 :(得分:1)

Mingroup by子句一起使用:

select id, id_a, id_b, min(uds) as uds 
from table1 
group by id, id_a, id_b
order by id, id_a, id_b;

但是,我应该提到这将为您提供所有项目,您还需要在其他列上指定聚合,或者不包括它们。

select id, min(uds) as uds 
from table1 
group by id
order by id;

根据您想要的输出判断,以下可能是您想要的:

select id, max(id_a) as id_a, max(id_b) as id_b, min(uds) as uds 
from table1 
group by id
order by id;

答案 1 :(得分:0)

你必须设置具有最小uds值的条件,或者你必须用最小的uds决定你想要多少条记录

答案 2 :(得分:0)

大多数数据库都支持ANSI标准窗口函数。一个简单的方法来做你想要的:

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

答案 3 :(得分:0)

更多单向:

select 
    a.*
from 
    #temp a inner join (select id, min(uds) minUds from #temp group by id) b on 
        a.id = b.id 
        and a.uds = b.minUds