Oracle
 sql >> Base de données >  >> RDS >> Oracle

Sélectionnez la dernière ligne pour chaque groupe à partir d'Oracle

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.