如果中间缺少数字,则获取数字列的范围(最小/最大)

时间:2015-03-16 09:50:15

标签: sql sql-server sql-server-2005

如果数字在某处结束,然后以更高的数字再次获取,我将如何查询数字列的范围?

如果我有一个列:

Number
-------
 1
 2
 3
 4
 5
 11
 12
 13

如何返回

之类的结果
Min | Max
----------
 1  |  5
 11 |  13

3 个答案:

答案 0 :(得分:5)

;WITH CTE AS
(
 SELECT 
   Number, 
   Number - dense_rank() over (order by Number) grp
 FROM yourtable
)
SELECT min(Number) min, max(Number) max
FROM CTE
GROUP BY grp

FIDDLE

答案 1 :(得分:0)

试试这个:

select t1.num, (select min(num) from table t3
                where t3.num >= t1.num
                  and t3.num + 1 not in (select num from table))
from table t1
where not exists (select * from table t2
                  where t1.num - 1 = t2.num)

where子句仅查找不同范围的最小值。

子选择找到最低值,没有值+ 1可用。

答案 2 :(得分:0)

另一种方法:

select n1.number as min,min(n2.number) as max
from table n1 
JOIN table n2 ON n1.number<n2.number 
AND NOT EXISTS (select 1 from number where number = n1.number-1)
AND  NOT EXISTS (select 1 from number where number=n2.number+1)
group by n1.number
order by n1.number