SQL - 如何选择具有最大值列的行(+ group by)

时间:2015-08-17 20:57:37

标签: sql oracle

我正在构建这里引用的问题: 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技巧)

目标是获得相同的答案,但是按类别分组

2 个答案:

答案 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,请在子查询中选择它。