SQL-如何选择具有最大值(+group by)列的行
我是在这里提到的问题上建立起来的: 我需要查询具有maxvaluei.e的行。60那么,我们到了 坐两排。从那以后,我需要时间戳最低的那一行 2010年5月18日下午3点->60 我们如何根据Sujee提供的答案: 仅供参考-我正在使用Oracle,并试图避免嵌套联接,因此使用rownum技巧SQL-如何选择具有最大值(+group by)列的行,sql,oracle,Sql,Oracle,我是在这里提到的问题上建立起来的: 我需要查询具有maxvaluei.e的行。60那么,我们到了 坐两排。从那以后,我需要时间戳最低的那一行 2010年5月18日下午3点->60 我们如何根据Sujee提供的答案: 仅供参考-我正在使用Oracle,并试图避免嵌套联接,因此使用rownum技巧 目标是获得相同的答案,但对于按类别分组的情况,只需通过以下方式向顺序添加一个额外的键: 如果要在结果集中选择类别,请在子查询中选择它。听起来好像要为每个类别选择高值最高的行。如果是,您可以使用row_n
目标是获得相同的答案,但对于按类别分组的情况,只需通过以下方式向顺序添加一个额外的键:
如果要在结果集中选择类别,请在子查询中选择它。听起来好像要为每个类别选择高值最高的行。如果是,您可以使用row_number根据其高值对类别中的每一行进行排名,并且只选择排名最高的行,即rn=1:
这不会只返回一行吗?我正在读,但我想我需要两行,因为类别请解释类别与问题有什么关系。你在寻找什么样的结果集?
date value
18/5/2010, 1 pm 40
18/5/2010, 2 pm 20
18/5/2010, 3 pm 60
18/5/2010, 4 pm 30
18/5/2010, 5 pm 60
18/5/2010, 6 pm 25
select high_val, my_key
from (select high_val, my_key
from mytable
where something = 'avalue'
order by high_val desc)
where rownum <= 1
date value category
18/5/2010, 1 pm 40 1
18/5/2010, 2 pm 20 1
18/5/2010, 3 pm 60 1
18/5/2010, 4 pm 30 2
18/5/2010, 5 pm 60 2
18/5/2010, 6 pm 25 2
select high_val, my_key
from (select high_val, my_key
from mytable
where something = 'avalue'
order by high_val desc, date asc
)
where rownum = 1;
select * from (
select row_number() over (partition by category order by high_val desc, date asc) rn, *
from mytable
where something = 'avalue'
) t1 where rn = 1