我有一个如下表
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
提前谢谢你......
答案 0 :(得分:1)
将Min
与group 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