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.