信号の発生を表すintのこの列があり、連続する行の数を示す列を追加しようとしています
私のデータがこのように見える場合
724
727
728
733
735
737
743
747
749
連続する行数列を持つ結果のデータは次のようになります
724 1
727 1
728 2
729 3
735 1
737 1
743 1
744 2
748 1
ループ関数を使用してそれを実行しましたが、cteを使用して理解しようとしています。これが私の最新の試みのサンプルです
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
これらの結果を生成します
signal consecutiveMarker
727 0
728 1
729 1
735 0
737 0
743 0
744 1
748 0
最初の明らかな問題は、シリーズの最初の信号がないことです。それを除けば、これを連続マーカーのrow_numberパーティションで別のcteに渡すことができると思いました。それはそれを1つのパーティションとしてパーティション化したため、それは機能しませんでした。あるシリーズが次のシリーズと分離していることをパーティション分割方法に示す方法が見つかりませんでした
どんな助けでもありがたいです。