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

Mesclando dados em uma única tabela SQL sem um cursor


A observação chave é que uma sequência de números menos outra sequência é uma constante. Podemos gerar outra sequência usando row_number . Isso identifica todos os grupos:
select id, MIN(number) as low, MAX(number) as high
from (select t.*,
             (number - ROW_NUMBER() over (partition by id order by number) ) as groupnum
      from t
     ) t
group by id, groupnum

O resto é apenas agregação.