sql >> Database teknologi >  >> RDS >> Oracle

Vælg den seneste række for hver gruppe fra oracle

Du kan bruge analytiske funktioner

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

Afhængigt af hvordan du vil håndtere bindinger (hvis der kan være to rækker med samme user_id og ts ), vil du måske bruge row_number eller dense_rank funktion i stedet for rank . rank ville tillade flere rækker at være først, hvis der var uafgjort. row_number ville vilkårligt returnere en række, hvis der var uafgjort. dense_rank ville opføre sig som rank for rækkerne, der lignede for første, men ville betragte den næste række som anden i stedet for tredje, forudsat at to rækker lignede for første.



  1. Hvordan grupperer jeg efter uge i MySQL?

  2. Beregning af forskel mellem to tidsstempler i Oracle i millisekunder

  3. Databasevalg til oprettelse af to forbundne tabeller?

  4. En simpel brugssag for indekser på primære nøgler