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.