Oracle SQL:如何每组只显示一个最大值

Oracle SQL: how to show only one max per group

大家好,首先感谢您抽出时间。 我有这个数据

数据:

而且我必须获得每个组的最大值,如果有一个组有两个相同的最大值,比如

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);