Specyficzne (i najszybsze) rozwiązanie Postgres:
select distinct on (out_id) *
from foo
order by out_id, id desc;
Standardowe rozwiązanie SQL wykorzystujące funkcję okna (drugi najszybszy)
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;
Zauważ, że oba rozwiązania zwrócą tylko każdy id
raz, nawet jeśli jest wiele out_id
wartości, które są takie same. Jeśli chcesz, aby wszystkie zostały zwrócone, użyj dense_rank()
zamiast row_number()