[英]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.