sql >> Database >  >> RDS >> Oracle

Hoe opeenvolgende rijen samen te groeperen in SQL door meerdere kolommen

Dit is een hiaten en eilanden probleem. Een methode om het op te lossen gebruikt 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);

Het is een beetje lastig om uit te leggen hoe dit werkt. Mijn suggestie is om de subquery uit te voeren en u zult zien hoe het verschil in rijnummers de groepen definieert waarnaar u op zoek bent.



  1. Een gebruiker maken met PSQL

  2. Hoe kan ik alle informatie over een tabel in Oracle krijgen?

  3. MySQL - SELECTEER ALS in WAAR

  4. CSV-bestand importeren in een Oracle Forms-toepassing