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

Höchste pro Gruppe

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()