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

Jak seskupit po sobě jdoucí řádky v SQL podle více sloupců

Toto je problém mezer a ostrovů. Jedna metoda pro řešení používá row_number() :

select Date, User, min(Time) as start_time, max(time) as end_time,
       Location,
       listagg(Service, ',') within group (order by service),     
       count(*) as cnt
from (select t.*,
             row_number() over (date order by time) as seqnum,
             row_number() over (partition by user, date, location order by time) as seqnum_2
      from t
     ) t
group by Date, User, Location, (seqnum - seqnum_2);

Je trochu složité vysvětlit, jak to funguje. Můj návrh je spustit poddotaz a uvidíte, jak rozdíl čísel řádků definuje skupiny, které hledáte.



  1. Získejte n seskupených kategorií a shrňte ostatní do jedné

  2. Mohu zadat heslo jednou pro více vyvolání příkazového řádku mysql, kde dotazy nejsou předem známy?

  3. MySQL GROUP BY dva sloupce

  4. Parametrizovaný dotaz pro MySQL s C#