Du kan bruge analytiske funktioner
SELECT *
FROM (SELECT c.*,
rank() over (partition by user_id order by ts desc) rnk
FROM comments c)
WHERE rnk = 1
Afhængigt af hvordan du vil håndtere bindinger (hvis der kan være to rækker med samme user_id og ts ), vil du måske bruge row_number eller dense_rank funktion i stedet for rank . rank ville tillade flere rækker at være først, hvis der var uafgjort. row_number ville vilkårligt returnere en række, hvis der var uafgjort. dense_rank ville opføre sig som rank for rækkerne, der lignede for første, men ville betragte den næste række som anden i stedet for tredje, forudsat at to rækker lignede for første.