Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ermitteln Sie das Minimum und das Maximum für Teilmengen aufeinanderfolgender Zeilen – Lücken und Inseln

Sie möchten aufeinanderfolgende Gruppen ähnlicher Zeilen finden und dann aggregieren. Ich mag den Ansatz der unterschiedlichen Zeilennummern:

select name, act, min(startt) as startt, max(endd) as endd
from (select i.*,
             row_number() over (partition by name, act order by rn) as seqnum_na,
             row_number() over (partition by name order by rn) as seqnum_n
      from input i
     ) i
group by (seqnum_n - seqnum_na), name, act;

Sie können sehen, wie das funktioniert, indem Sie sich ansehen, was die Unterabfrage macht.