PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Obtenir la valeur de champ d'un enregistrement qui rend une condition d'agrégation vraie

with agg as (
    select a, min(d) as d
    from x
    group by a
    having 1 = any(array_agg(b))
)
select distinct on (a, c)
    a, c, d
from
    x
    inner join
    agg using (a, d)
order by a, c

Si min(d) n'est pas unique dans le a groupe alors il est possible d'exister plus d'un c correspondant . Ce qui précède renverra le plus petit c. Si vous voulez le plus gros, faites-le à la place

order by a, c desc