Специфично за Postgres (и най-бързо) решение:
select distinct on (out_id) *
from foo
order by out_id, id desc;
Стандартно SQL решение, използващо прозоречна функция (второ най-бързо)
select id, x_part, y_part, out_id, out_idx
from (
select id, x_part, y_part, out_id, out_idx,
row_number() over (partition by out_id order by id desc) as rn
from foo
) t
where rn = 1
order by id;
Имайте предвид, че и двете решения ще върнат само всеки id
веднъж, дори ако има няколко out_id
стойности, които са еднакви. Ако искате да бъдат върнати всички, използвайте dense_rank()
вместо row_number()