我正在建立这里引用的问题:SQL - 如何选择具有最大值的列的行 https://stackoverflow.com/questions/2854257/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(value)(即 60)的行。所以,我们在这里
得到两行。由此,我需要具有最低时间戳的行
那天(即 18/5/2010, 3 pm -> 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
如果数据有第三列“类别”。
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)