sql >> Base de Datos >  >> RDS >> Sqlserver

Fusionar datos en una sola tabla SQL sin un Cursor

La observación clave es que una secuencia de números menos otra secuencia es una constante. Podemos generar otra secuencia usando row_number . Esto identifica a todos los 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

El resto es solo agregación.