Tengo esta columna de entradas que representa la aparición de una señal y estoy tratando de agregar una columna que muestre el recuento de filas consecutivas
Si mis datos se ven así
724
727
728
733
735
737
743
747
749
los datos resultantes con una columna de recuento de filas consecutivas se verían así
724 1
727 1
728 2
729 3
735 1
737 1
743 1
744 2
748 1
Lo hice usando una función de bucle, pero estoy tratando de resolverlo usando un cte. Aquí hay una muestra de mi último intento
DECLARE @d TABLE ( signal INT )
INSERT INTO @d
SELECT 724
UNION
SELECT 727
UNION
SELECT 728
UNION
SELECT 729
UNION
SELECT 735
UNION
SELECT 737
UNION
SELECT 743
UNION
SELECT 744
UNION
SELECT 748 ;
WITH a AS ( SELECT signal,
ROW_NUMBER() OVER ( ORDER BY signal ) AS marker
FROM @d
) ,
b AS ( SELECT a1.signal,
CASE ( a1.signal - a2.signal )
WHEN 1 THEN 1
ELSE 0
END consecutiveMarker
FROM a a1
INNER JOIN a a2 ON a2.marker = a1.marker - 1
)
SELECT *
FROM b
Produce estos resultados
signal consecutiveMarker
727 0
728 1
729 1
735 0
737 0
743 0
744 1
748 0
Al primer problema obvio le falta la primera señal de una serie. Salvo eso, pensé que podría pasar esto a otro cte con una partición row_number en el Marker consecutivo. Eso no funcionó porque lo particionó como una partición. No pude encontrar una manera de indicarle al método de partición que una serie está separada de la siguiente
Cualquier ayuda es apreciada.