Můžete použít analytické funkce
SELECT *
FROM (SELECT c.*,
rank() over (partition by user_id order by ts desc) rnk
FROM comments c)
WHERE rnk = 1
V závislosti na tom, jak chcete zacházet s remízou (pokud mohou existovat dva řádky se stejným user_id
a ts
), možná budete chtít použít row_number
nebo dense_rank
funkci spíše než rank
. rank
by umožnilo, aby bylo více řad jako první, pokud by existovala remíza. row_number
by libovolně vrátil jednu řadu, pokud by došlo k nerozhodnému výsledku. dense_rank
bude se chovat jako rank
pro řádky, které byly shodné jako první, ale další řadu by považovali za druhou, a nikoli za třetí, za předpokladu, že dvě řady shodně za první.