1、实际问题
连续范围问题也是一个非常经典的SQL编程问题,在实际的开发中也经常使用,处理的方法有比较多,但是一般采用数字辅助表和分组。
如下例子:
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);
上面的数据如何重到连续范围:
2、解决方法
我们看下面的语句返回的结果:
select a,@a := @a+1 rn from t,(select @a:=0) as a;
通过上面的辅助列RN说明,如果SQL结果将a-rn值,如果是不变的,说明是连续的,
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 diff
3、结果一下经验:
在实际开发中,有关连续范围和间断范围会用到数字辅助表和分组来解决此类问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。