PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Holen Sie sich den Feldwert aus einem Datensatz, der bewirkt, dass eine Aggregatbedingung wahr ist

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

Wenn min(d) innerhalb des a nicht eindeutig ist Gruppe, dann ist es möglich, dass mehr als ein entsprechendes c existiert . Das obige gibt das kleinste c zurück. Wenn Sie stattdessen das Größte wollen

order by a, c desc