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来分组得到递增的序列。
- 若有不明之处,欢迎留言咨询~










