sql >> Base de Datos >  >> RDS >> PostgreSQL

Obtenga el valor de campo de un registro que hace que una condición agregada sea verdadera

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) no es único dentro del a grupo entonces es posible que exista más de un c correspondiente . Lo anterior devolverá el más pequeño c. Si quieres lo más grande, hazlo

order by a, c desc