PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Il più alto per ogni gruppo

Soluzione specifica (e più veloce) di Postgres:

select distinct on (out_id) *
from foo
order by out_id, id desc;

Soluzione SQL standard che utilizza una funzione finestra (secondo più veloce)

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;

Nota che entrambe le soluzioni restituiranno solo ogni id una volta, anche se sono presenti più out_id valori che sono gli stessi. Se vuoi che vengano restituiti tutti, usa dense_rank() invece di row_number()