0
点赞
收藏
分享

微信扫一扫

Mysql实战之求出连续范围

云朵里的佛光 2022-01-28 阅读 137


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


举报

相关推荐

0 条评论