sql >> Databasteknik >  >> RDS >> PostgreSQL

Högst per grupp

Postgres specifik (och snabbaste) lösning:

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

Standard SQL-lösning som använder en fönsterfunktion (näst snabbast)

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;

Observera att båda lösningarna endast returnerar varje id en gång, även om det finns flera out_id värden som är desamma. Om du vill att alla ska returneras, använd dense_rank() istället för row_number()



  1. ORA-16205 Uppgradering till 11.2.0.3

  2. CAST() vs TRY_CAST() i SQL Server:Vad är skillnaden?

  3. SQL-lagrade procedurparametrar är skadade?

  4. Söka efter text inom Oracle Stored Procedures