Tôi có cột int này đại diện cho sự xuất hiện của tín hiệu và tôi đang cố gắng thêm một cột hiển thị số hàng liên tiếp
Nếu dữ liệu của tôi trông như thế này
724
727
728
733
735
737
743
747
749
dữ liệu kết quả với cột đếm hàng liên tiếp sẽ trông như thế này
724 1
727 1
728 2
729 3
735 1
737 1
743 1
744 2
748 1
Tôi đã thực hiện nó bằng cách sử dụng chức năng lặp nhưng tôi đang cố gắng tìm ra bằng cách sử dụng một cte. Đây là một mẫu của nỗ lực mới nhất của tôi
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
Tạo ra những kết quả này
signal consecutiveMarker
727 0
728 1
729 1
735 0
737 0
743 0
744 1
748 0
Vấn đề rõ ràng đầu tiên là thiếu tín hiệu đầu tiên trong một chuỗi. Chặn điều đó, tôi nghĩ rằng sau đó tôi có thể chuyển cái này sang một cte khác với phân vùng row_number trên liên kếtMarker. Điều đó đã không làm việc bởi vì nó phân vùng nó như là một phân vùng. Tôi không thể tìm ra cách nào để chỉ ra phương pháp phân vùng rằng một chuỗi tách biệt với chuỗi tiếp theo
Bất kỳ trợ giúp được đánh giá cao.