sql >> Database >  >> RDS >> PostgreSQL

Hoogste per groep

Postgres-specifieke (en snelste) oplossing:

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

Standaard SQL-oplossing met een vensterfunctie (tweede snelste)

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;

Merk op dat beide oplossingen alleen elke id . teruggeven één keer, zelfs als er meerdere out_id . zijn waarden die hetzelfde zijn. Als je ze allemaal wilt retourneren, gebruik dan dense_rank() in plaats van row_number()



  1. Kolomwaarde kopiëren van de ene tabel naar de andere Overeenkomende ID's

  2. Sorteer bepaalde waarden naar boven

  3. Werk de int-kolom in de tabel bij met unieke oplopende waarden

  4. MacOSX:mysql automatisch starten bij opstarten