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
Ако min(d)
не е уникален в рамките на a
група, тогава е възможно да съществува повече от един съответстващ c
. Горното ще върне най-малкото c. Ако искате най-голямото, направете вместо това
order by a, c desc