我正在构建这里引用的问题: SQL - How to select a row having a column with max value
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
我需要查询具有max(值)的行(即60)。所以,我们在这里 得到两行。从那以后,我需要具有最低时间戳的行 当天(即2010年5月18日,下午3点 - > 60)
我们怎样才能在Sujee提供的答案的基础上再接再厉:
select high_val, my_key from (select high_val, my_key from mytable where something = 'avalue' order by high_val desc) where rownum <= 1
如果数据有第3列&#34;类别&#34;。
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
仅供参考 - 我正在使用Oracle,并试图避免嵌套连接(因此是rownum技巧)
目标是获得相同的答案,但是按类别分组
答案 0 :(得分:4)
听起来您想要为每个类别选择具有最高high_val
的行。如果是这样,您可以使用row_number()
根据其high_val
值对某个类别中的每一行进行排名,并仅选择排名最高的行,即rn = 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
答案 1 :(得分:0)
只需在order by
:
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;
如果您希望结果集中有category
,请在子查询中选择它。