我需要能够按两列分组,并且只返回这两列的另一列的id为最大值的行。我所追求的细节在第四栏中称为答案
COLUMN1 | COLUMN2 | NUMBERCOL | Answer
--------------- ----------------------------
123 | 456 | 1 | a
123 | 456 | 2 | x
123 | 456 | 3 | s
654 | 564 | 1 | a
654 | 564 | 2 | s
654 | 564 | 3 | p
654 | 564 | 4 | b
所以我需要从第一个分组结果中回答s并从第二个分组结果中回答b
答案 0 :(得分:3)
您可以使用带有JOIN
的子查询来获得结果:
select t1.column1,
t1.column2,
t1.numbercol,
t1.answer
from yourtable t1
inner join
(
select column1, column2,
max(numbercol) MaxNum
from yourtable
group by column1, column2
) t2
on t1.column1 = t2.column1
and t1.column2 = t2.column2
and t1.numbercol = t2.MaxNum
答案 1 :(得分:2)
您可以使用分析函数:
select t.*
from (select t.*,
row_number() over (partition by column1, column2 order by numbercol desc) as seqnum
from t
) t
where seqnum = 1
这不是通过聚合数据,而是通过为行分配序号来实现的。对于(column1,column2)的每个新值,序列号重新开始,并且排序由numbercol确定。最高的numbercol值为1,第二高的值为2,依此类推。这是Oracle中分析函数的一个示例(在其他数据库中称为“窗口”函数)。
最后的where
子句选择您想要的行 - numbercol最高的行。