我当前从表中查询的内容是给我这样的
C1 | C2 | C3 | C4
xx | cc | ff | i1
xx | dd | kk | i2
yy | oo | tt | i3
zz | uu | ll | i4
zz | jj | ee | i5
所有'我是整数
我按C1,C2,C3进行分组
我想对每个与最高C4值相对应的不同C1值只获得一行
最好的办法是什么?
答案 0 :(得分:3)
为此,您需要分析功能。函数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
答案 1 :(得分:0)
与共同相关的子问题非常简单:
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,我们应该返回两行。