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

Højest for hver gruppe

Postgres specifik (og hurtigste) løsning:

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

Standard SQL-løsning, der bruger en vinduefunktion (næsthurtigste)

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;

Bemærk, at begge løsninger kun returnerer hvert id én gang, selvom der er flere out_id værdier, der er de samme. Hvis du vil have dem alle returneret, skal du bruge dense_rank() i stedet for row_number()



  1. læse/skrive unicode-data i MySql

  2. Hvad er standardrækkefølgen for en liste, der returneres fra et Django-filteropkald?

  3. Hvordan opretter man tabeller med adgangskodefelter i mysql?

  4. Opret Dato-objekt i PHP til datoer før 1970 i et bestemt format