Saya memiliki kolom int yang mewakili kemunculan sinyal dan saya mencoba menambahkan kolom yang menunjukkan jumlah baris berturut-turut
Jika data saya terlihat seperti ini
724
727
728
733
735
737
743
747
749
data yang dihasilkan dengan kolom jumlah baris berturut-turut akan terlihat seperti ini
724 1
727 1
728 2
729 3
735 1
737 1
743 1
744 2
748 1
Saya sudah melakukannya menggunakan fungsi looping tapi saya mencoba mencari tahu menggunakan cte. Berikut adalah contoh upaya terbaru saya
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
Menghasilkan hasil ini
signal consecutiveMarker
727 0
728 1
729 1
735 0
737 0
743 0
744 1
748 0
Masalah pertama yang jelas adalah kehilangan sinyal pertama dalam suatu seri. Kecuali itu, saya pikir saya bisa meneruskan ini ke cte lain dengan mempartisi row_number pada consecutiveMarker. Itu tidak berhasil karena dipartisi sebagai satu partisi. Saya tidak dapat menemukan cara untuk menunjukkan ke metode partisi bahwa satu seri terpisah dari yang berikutnya
Bantuan apa pun dihargai.