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.