Du kan använda analytiska funktioner
SELECT *
FROM (SELECT c.*,
rank() over (partition by user_id order by ts desc) rnk
FROM comments c)
WHERE rnk = 1
Beroende på hur du vill hantera kopplingar (om det kan finnas två rader med samma user_id
och ts
), kanske du vill använda row_number
eller dense_rank
funktion snarare än rank
. rank
skulle tillåta flera rader att vara först om det var oavgjort. row_number
skulle godtyckligt returnera en rad om det var oavgjort. dense_rank
skulle bete sig som rank
för raderna som var oavgjorda för första men skulle betrakta nästa rad som andra snarare än tredje förutsatt att två rader var lika för första.