Oracle
 sql >> Database >  >> RDS >> Oracle

Seleziona l'ultima riga per ogni gruppo da Oracle

Puoi usare le funzioni analitiche

SELECT *
  FROM (SELECT c.*,
               rank() over (partition by user_id order by ts desc) rnk
          FROM comments c)
 WHERE rnk = 1

A seconda di come vuoi gestire i pareggi (se possono esserci due righe con lo stesso user_id e ts ), potresti voler utilizzare il row_number o dense_rank funzione anziché rank . rank consentirebbe a più righe di essere le prime in caso di parità. row_number restituirebbe arbitrariamente una riga in caso di parità. dense_rank si comporterebbe come rank per le file che hanno pareggiato per la prima, ma considererebbero la riga successiva come seconda anziché terza, supponendo che due file siano in parità per la prima.