PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ottieni il valore del campo da un record che fa sì che una condizione di aggregazione sia vera

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

Se min(d) non è univoco all'interno di a gruppo allora è possibile esistere più di un corrispondente c . Quanto sopra restituirà il più piccolo c. Se vuoi il più grande, fallo invece

order by a, c desc