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.