sql切分连续数字

sql切分连续数字

问题描述

存在一个表,只有number一列,数据是n行非完全连续的数据,求这n行数据中所有的连续段

示例

如:表中共10行数据,分别为数字1,2,3,5,6,7,9,10,11,12。则按照规则求得结果为 1-3为一段,5-6为一段,9-12为一段

思路

1、按number大小排序,并从小到大标上序号rank_id 2、增加差值列(D_value=rand_id-number) 3、按D_value分组,求number的最小值、最大值,即得连续段的开始数值、结束数值

sql demo

建表

drop table if exists table_test;
create table table_test (
number int comment '数字'
);

造数

truncate table  table_test;
INSERT INTO table_test
values(1),(2),(3),(5),(6),(7),(9),(10),(11),(12);

求值

select
D_value,min(number) as start_num,max(number) as end_num
from
(
select
number-row_number() over (order by number) as D_value
,number  
from table_test
) t
group by D_value;
posted @ 2019-08-28 15:19  机器三脚猫  阅读(543)  评论(0编辑  收藏  举报