Vous pouvez utiliser des fonctions analytiques
SELECT *
FROM (SELECT c.*,
rank() over (partition by user_id order by ts desc) rnk
FROM comments c)
WHERE rnk = 1
Selon la façon dont vous souhaitez gérer les liens (s'il peut y avoir deux lignes avec le même user_id et ts ), vous pouvez utiliser le row_number ou dense_rank fonction plutôt que rank . rank permettrait à plusieurs rangées d'être les premières en cas d'égalité. row_number renverrait arbitrairement une ligne s'il y avait égalité. dense_rank se comporterait comme rank pour les rangées qui sont à égalité pour la première mais qui considéreraient la rangée suivante comme étant la deuxième plutôt que la troisième en supposant que deux rangées sont à égalité pour la première.