如何在T-SQL中检查一组数字是否连续?

Ant*_*ift 5 t-sql sql-server

如果我要有一个包含n行的整数列的表,并想检查它们是否连续,我该怎么办呢?

DECLARE @Temp TABLE 
(
    IntegerValue INT,
    Processed BIT
)
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案,适用于3行,但这是无穷无尽的,如果要求改变那么查询也是如此(忽略我的总和在这种情况下不起作用的事实).

@SumOfValues = (@FirstValue * @NumOfValues) + @NumOfValues 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 14

SELECT CASE
         WHEN COUNT(DISTINCT IntegerValue) /*Or COUNT(*) dependant on how
                                            duplicates should be treated */ 
                =  1 + MAX(IntegerValue) - MIN(IntegerValue) THEN 'Y'
         ELSE 'N'
       END
FROM   @Temp  
Run Code Online (Sandbox Code Playgroud)

如果你想知道差距在哪里可以使用

;WITH T AS
(
SELECT *,
       DENSE_RANK() OVER (ORDER BY IntegerValue) - IntegerValue AS Grp
FROM @Temp
)
SELECT MIN(IntegerValue) AS RangeStart, 
       MAX(IntegerValue) AS RangeEnd
FROM T
GROUP BY Grp
ORDER BY MIN(IntegerValue)
Run Code Online (Sandbox Code Playgroud)