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;