Mysql实战之求出连续范围
1.需求
根据表中的某一字段,求出其字段变化的连续范围。下面给出一个示例。
首先看表x,其中包含数据
mysql> select * from x;
+------+
| a |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
| 100 |
| 101 |
| 102 |
| 105 |
| 106 |
| 107 |
+------+
10 rows in set (0.03 sec)
那么对于这个表x字段a的连续范围就是3-6;100-102;105-107。现在需要求出这个范围。下面的代码就会介绍这个实现。
2.代码
select
min(a) as start_date
,max(a) as end_date
from
(
select
a
,@rank := @rank+1
,a - @rank as gro
from
(
select
a,
@rank := 0
from x
)as t1
)as t2
group by gro;
3.实现结果如下:
+------------+----------+
| start_date | end_date |
+------------+----------+
| 3 | 6 |
| 100 | 102 |
| 105 | 107 |
+------------+----------+
3 rows in set (0.00 sec)
4.难点简介
@rank
这是mysql中定义一个变量的语法,@rank := 0
是给rank这个变量赋值的语法- 通过一个构造变量的方法来实现递增排序。并通过
value - rank
来分组得到递增的序列。 - 若有不明之处,欢迎留言咨询~