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

Sådan grupperes på hinanden følgende rækker sammen i SQL efter flere kolonner

Dette er et problem med huller og øer. En metode til at løse det bruger 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);

Det er lidt svært at forklare, hvordan dette fungerer. Mit forslag er at køre underforespørgslen, og du vil se, hvordan forskellen på rækkenumre definerer de grupper, du leder efter.



  1. VBA-kode for at tilføje sammenkædet tabel med primærnøgle

  2. kompleks forespørgsel tager for lang tid at overføre

  3. MySQL max_allowed_packet param hvad er fangsten?

  4. Drop DB, men slet ikke *.mdf / *.ldf