当前位置: 首页> 教育> 大学 > 大数据面试SQL(八):求连续段的起始位置和结束位置

大数据面试SQL(八):求连续段的起始位置和结束位置

时间:2025/7/10 8:26:20来源:https://blog.csdn.net/xiaoweite1/article/details/141038990 浏览次数:0次

文章目录

求连续段的起始位置和结束位置

一、题目

二、分析

三、SQL实战

四、样例数据参考


求连续段的起始位置和结束位置

一、题目

有一张表t2_id记录了id,id不重复,但是会存在间断,求出连续段的起始位置和结束位置。

样例数据:

目标结果: 

二、分析

1、本题对重新分组的考察,此类题目真的比较常见的。

2、使用累积求和方式对数据进行重新分组。

3、根据重新分组标签进行分组,使用聚合函数min(),max()计算出每组的起始位置和结束位置。

维度评分
题目难度⭐️⭐️⭐️⭐️
题目清晰度⭐️⭐️⭐️⭐️⭐️
业务常见度⭐️⭐️⭐️

 

三、SQL实战

1、lag()函数进行开窗计算与上一行的差值。

查询语句:

select id,id - lag(id) over (order by id) as diff
from t2_id;

查询结果:

2、获得分组字段。

根据diff进行判断,如果差值为1代表连续赋值为0,否则代表不连续赋值为1,然后使用sum()进行累积计算,获得分组依据字段。

查询语句:

select id,sum(if(diff = 1, 0, 1)) over (order by id) as group_type
from (select id,id - lag(id) over (order by id) as difffrom t2_id) t;

查询结果:

3、得出连续分区结果。

查询语句:

select group_type,min(id) as start_pos,max(id) as end_pos
from (select id,sum(if(diff = 1, 0, 1)) over (order by id) as group_typefrom (select id,id - lag(id) over (order by id) as difffrom t2_id) t) tt
group by group_type
having min(id) <> max(id);

查询结果:

四、样例数据参考

--建表语句
CREATE TABLE t2_id (id bigint COMMENT 'ID'
) COMMENT 'ID记录表';
-- 插入数据
insert into t2_id(id)
values(1),(2),(3),(5),(6),(8),(10),(12),(13),(14),(15),(16);

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
关键字:大数据面试SQL(八):求连续段的起始位置和结束位置

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: