Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So gruppieren Sie aufeinanderfolgende Zeilen in SQL nach mehreren Spalten

Dies ist ein Lücken- und Inselproblem. Eine Methode zur Lösung verwendet 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);

Es ist etwas schwierig zu erklären, wie das funktioniert. Mein Vorschlag ist, die Unterabfrage auszuführen, und Sie werden sehen, wie die Differenz der Zeilennummern die Gruppen definiert, nach denen Sie suchen.