sql - with - where column is max




Postgresql estrae l'ultima riga per ogni id (2)

Il modo più efficiente è utilizzare distinct on operatore distinct on Postgres

select distinct on (id) id, date, another_info
from the_table
order by id, date desc;

Se si desidera una soluzione che funzioni su database (ma sia meno efficiente) è possibile utilizzare una funzione finestra:

select id, date, another_info
from (
  select id, date, another_info, 
         row_number() over (partition by id order by date desc) as rn
  from the_table
) t
where rn = 1
order by id;

Nella maggior parte dei casi, la soluzione con una funzione finestra è più veloce rispetto all'utilizzo di una sottoquery.

Supponiamo che io abbia i prossimi dati

  id    date          another_info
  1     2014-02-01         kjkj
  1     2014-03-11         ajskj
  1     2014-05-13         kgfd
  2     2014-02-01         SADA
  3     2014-02-01         sfdg
  3     2014-06-12         fdsA

Voglio per ogni ID estratto le ultime informazioni:

  id    date          another_info
  1     2014-05-13         kgfd
  2     2014-02-01         SADA
  3     2014-06-12         fdsA

Come potrei gestirlo?


Raggruppa per id e utilizza le funzioni di aggregazione per soddisfare i criteri dell'ultimo record. Per esempio

select  id, max(date), another_info
from the_table
group by id, another_info




greatest-n-per-group