繁体   English   中英

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

[英]SQL - How to select a row having a column with max value (+ group by)

我正在构建这里引用的问题: SQL - 如何选择具有最大值列的行

 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(value)的行(即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列“类别”。

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技巧)

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

听起来你想要为每个类别选择具有最高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

只需order by以下方式为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 ,请在子查询中选择它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM