1

我当前的表格查询给了我这样的东西

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 值只获取一行

最好的方法是什么?

4

2 回答 2

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
于 2013-06-17T19:43:41.657 回答
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,我们应该返回这两行。

于 2013-06-17T19:54:55.327 回答