sql >> Databáze >  >> RDS >> Oracle

Vyberte poslední řádek pro každou skupinu z oracle

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í.



  1. 3 Nechutné I/O statistiky, které zpožďují výkon SQL dotazu

  2. Oracle SQL PIVOT Table

  3. SqlDateTime.MinValue !=DateTime.MinValue, proč?

  4. Jak odebrat primární klíč v SQL