Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Encontre min e max para subconjuntos de linhas consecutivas - lacunas e ilhas


Você deseja encontrar grupos consecutivos de linhas semelhantes e, em seguida, agregação. Eu gosto da diferença de abordagem de números de linha:
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;

Você pode ver como isso funciona observando o que a subconsulta faz.