PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Najwyższa w każdej grupie

Specyficzne (i najszybsze) rozwiązanie Postgres:

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

Standardowe rozwiązanie SQL wykorzystujące funkcję okna (drugi najszybszy)

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;

Zauważ, że oba rozwiązania zwrócą tylko każdy id raz, nawet jeśli jest wiele out_id wartości, które są takie same. Jeśli chcesz, aby wszystkie zostały zwrócone, użyj dense_rank() zamiast row_number()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje lepszy sposób na wyodrębnienie pory dnia?

  2. Optymalizacja zapytania licznika dla PostgreSQL

  3. Postgresql - pobierz najbliższy wiersz daty i godziny względem podanej wartości daty i godziny

  4. 'Nie można znaleźć pg-0.12.2 w żadnym ze źródeł' podczas uruchamiania rspec

  5. Sekwencje, na które nie mają wpływu transakcje?