关于mysql:mysql如何处理连续范围问题

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、后果一下教训:
在理论开发中,无关间断范畴和间断范畴会用到数字辅助表和分组来解决此类问题。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理