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);
大家好,首先感谢您抽出时间。 我有这个数据
数据:
而且我必须获得每个组的最大值,如果有一个组有两个相同的最大值,比如
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);