Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wählen Sie die neueste Zeile für jede Gruppe von Oracle aus

Sie können analytische Funktionen verwenden

SELECT *
  FROM (SELECT c.*,
               rank() over (partition by user_id order by ts desc) rnk
          FROM comments c)
 WHERE rnk = 1

Abhängig davon, wie Sie mit Bindungen umgehen möchten (wenn es zwei Zeilen mit derselben user_id geben kann und ts ), möchten Sie vielleicht die row_number verwenden oder dense_rank Funktion statt rank . rank würde zulassen, dass mehrere Reihen an erster Stelle stehen, wenn es ein Unentschieden gibt. row_number würde willkürlich eine Zeile zurückgeben, wenn es ein Unentschieden gäbe. dense_rank würde sich wie rank verhalten für die Reihen, die für die erste gleich waren, aber die nächste Reihe als die zweite und nicht als die dritte betrachten würden, vorausgesetzt, dass zwei Reihen für die erste gleich sind.