U kunt analytische functies gebruiken
SELECT *
FROM (SELECT c.*,
rank() over (partition by user_id order by ts desc) rnk
FROM comments c)
WHERE rnk = 1
Afhankelijk van hoe u met koppelingen wilt omgaan (als er twee rijen kunnen zijn met dezelfde user_id en ts ), wilt u misschien het row_number . gebruiken of dense_rank functie in plaats van rank . rank zou toestaan dat meerdere rijen de eerste zijn als er een gelijkspel was. row_number zou willekeurig één rij teruggeven als er een gelijkspel was. dense_rank zou zich gedragen als rank voor de rijen die eerst gelijk waren, maar de volgende rij als tweede beschouwen in plaats van als derde, ervan uitgaande dat twee rijen gelijk eindigen.