我有这列整数表示信号的出现,我试图添加一列来显示连续行的计数
如果我的数据看起来像这样
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
第一个明显的问题是缺少系列中的第一个信号。除非如此,否则我想可以将其传递给在continuousMarker上具有row_number分区的另一个cte。那没有用,因为它将其分区为一个分区。我找不到一种方法来指示分区方法,一个系列与下一个系列是分开的
任何帮助表示赞赏。
1
源数据和预期结果之间似乎不匹配。
—
马丁·史密斯,