Postgres-spezifische (und schnellste) Lösung:
select distinct on (out_id) *
from foo
order by out_id, id desc;
Standard-SQL-Lösung mit einer Fensterfunktion (zweitschnellste)
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;
Beachten Sie, dass beide Lösungen nur jede id
zurückgeben einmal, auch wenn es mehrere out_id
gibt Werte, die gleich sind. Wenn Sie möchten, dass sie alle zurückgegeben werden, verwenden Sie dense_rank()
statt row_number()