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.