Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Trouver min et max pour des sous-ensembles de lignes consécutives - lacunes et îlots

Vous souhaitez rechercher des groupes consécutifs de lignes similaires, puis une agrégation. J'aime la différence d'approche des numéros de ligne :

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;

Vous pouvez voir comment cela fonctionne en regardant ce que fait la sous-requête.