一、实际问题编程
连续范围问题也是一个很是经典的SQL编程问题,在实际的开发中也常用,处理的方法有比较多,可是通常采用数字辅助表和分组。spa
以下例子:blog
create table t(a int unsigned not null primary key);开发
insert into t value(1);
insert into t value(2);
insert into t value(3);
insert into t value(100);
insert into t value(101);
insert into t value(103);
insert into t value(104);
insert into t value(105);it
上面的数据如何重到连续范围:table
二、解决方法
咱们看下面的语句返回的结果:
select a,@a := @a+1 rn from t,(select @a:=0) as a;class
经过上面的辅助列RN说明,若是SQL结果将a-rn值,若是是不变的,说明是连续的,select
SELECT a,rn,a-rn
FROM(
SELECT a,@a := @a+1 rn FROM t,(SELECT @a:=0) AS a) b方法
认真分析之后,再作一下分组
SELECT MIN(a) start_range,MAX(a) start_range FROM(
SELECT a,rn,a-rn AS diff
FROM(
SELECT a,@a := @a+1 rn FROM t,(SELECT @a:=0) AS a) b
) c
GROUP BY diffim
三、结果一下经验:在实际开发中,有关连续范围和间断范围会用到数字辅助表和分组来解决此类问题。