mysql如何處理連續範圍問題

一、實際問題編程

連續範圍問題也是一個很是經典的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

image.png

二、解決方法
咱們看下面的語句返回的結果:
select a,@a := @a+1 rn from t,(select @a:=0) as a;class

image.png

經過上面的輔助列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方法

image.png

認真分析之後,再作一下分組
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

image.png

三、結果一下經驗:在實際開發中,有關連續範圍和間斷範圍會用到數字輔助表和分組來解決此類問題。

相關文章
相關標籤/搜索