如何解决Oracle SQL:每个组仅显示一个最大值
大家好,首先感谢您的宝贵时间。 我有这个数据
数据:
如果有一组具有两个相同的最大值(例如),我必须获取每个组的最大值
A 40 23/56/1982
A 40 31/4/5521
仅显示其中之一。 像这样
到目前为止,我已经尝试了两种方法,并且只有在每个组没有重复的最大值时,它们才起作用。
Oracle SQL代码:
SELECT DISTINCT SUB.GRUPO,SUBG.FECHA,SUBG.VALOR
FROM T2 SUBG
LEFT JOIN T2 SUB2
ON SUBG.GRUPO = SUB2.GRUPO AND SUBG.VALOR < SUB2.VALOR
WHERE SUB2.VALOR is NULL
ORDER BY GRUP
SELECT GRUPO,FECHA
FROM T2
WHERE VALOR IN (SELECT MAX(VALOR) FROM T2 GROUP BY GRUPO)
ORDER BY GRUPO
有什么想法怎么做?
解决方法
使用row_number()
select * from (select a.*,row_number() over(partition by GRUPO order by VALOR desc) rn
from T2 a
) a where rn=1
,
如果您希望每个组的最大约会日期,那么聚合就足够了:
select
groupo,max(fecha) fecha
from t2
group by groupo
如果您还想要相应的valor
,那么,由于结果集中只有3列,因此使用keep
可能是个不错的选择:
select
groupo,max(fecha) fecha,max(valor) keep(dense_rank last order by fecha) valor
from t2
group by groupo
,
更传统的方法是使用相关子查询:
select distinct groupo,fecha,valor
from t2 t
where valor = (select max(valor)
from t2
where groupo = t.groupo);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。