sql >> Databáze >  >> RDS >> PostgreSQL

Nejvyšší v každé skupině

Specifické (a nejrychlejší) řešení Postgres:

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

Standardní řešení SQL pomocí funkce okna (druhý nejrychlejší)

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;

Všimněte si, že obě řešení vrátí pouze každé id jednou, i když existuje více out_id hodnoty, které jsou stejné. Pokud je chcete vrátit všechny, použijte dense_rank() místo row_number()



  1. Správa vysoké dostupnosti v PostgreSQL – Část III:Patroni

  2. Rekurzivní CTE spojuje pole s rodiči z libovolného bodu

  3. PostgreSQL:zlepšení výkonu pg_dump, pg_restore

  4. Jak nastavit vlastnosti připojení (includeSynonyms)