我当前的表格查询给了我这样的东西
C1 | C2 | C3 | C4
xx | cc | ff | i1
xx | dd | kk | i2
yy | oo | tt | i3
zz | uu | ll | i4
zz | jj | ee | i5
所有的'i'都是整数
我按 C1、C2、C3 分组
我想为对应于最高 C4 值的每个不同 C1 值只获取一行
最好的方法是什么?
为此,您需要分析函数。该功能row_number()
可以满足您的要求:
select c1, c2, c3, c4
from (select t.*, row_number() over (partition by c1 order by c4 desc) as seqnum
from t
) t
where seqnum = 1
非常简单的相关子队列:
select C1,C2,C3,C4 from table tb where c4 in
(select max(C4) from table where C1=tb.C1 )
编辑:
经过康拉德的评论,对于以下一组数据:
c1 c2 c3 c4
1 2 3 4
1 3 4 4
此查询将返回两行。
我仍然不确定它是否需要,对我来说,我们应该为这些数据返回 2 行,因为我们无法区分两行并且两行都满足要求。
这就像我们想知道学生在哪个科目中获得了最高分。如果他的数学和英语都得 92,我们应该返回这两行。