Ich habe diese Spalte mit Ints, die das Auftreten eines Signals darstellen, und ich versuche, eine Spalte hinzuzufügen, die die Anzahl aufeinanderfolgender Zeilen anzeigt
Wenn meine Daten so aussehen
724
727
728
733
735
737
743
747
749
Die resultierenden Daten mit einer aufeinanderfolgenden Zeilenanzahlspalte würden so aussehen
724 1
727 1
728 2
729 3
735 1
737 1
743 1
744 2
748 1
Ich habe es mit einer Schleifenfunktion gemacht, aber ich versuche es mit einem cte herauszufinden. Hier ist ein Beispiel meines letzten Versuchs
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
Erzeugt diese Ergebnisse
signal consecutiveMarker
727 0
728 1
729 1
735 0
737 0
743 0
744 1
748 0
Das erste offensichtliche Problem ist das Fehlen des ersten Signals in einer Reihe. Ansonsten dachte ich, ich könnte dies dann mit einer row_number-Partitionierung auf dem aufeinanderfolgenden Marker an ein anderes cte übergeben. Das hat nicht funktioniert, weil es als eine Partition partitioniert wurde. Ich konnte keine Möglichkeit finden, der Partitionierungsmethode anzuzeigen, dass eine Serie von der nächsten getrennt ist
Jede Hilfe wird geschätzt.