SQL 求连续段的最后一个数及每段的个数

   日期:2020-08-24     浏览:89    评论:0    
核心提示:题目来源:https://www.nowcoder.com/discuss/480253?type=all&order=time&pos=&page=1&channel=1009&source_id=search_all数据create table test( id int);insert into test values (1),(2),(4),(5),(6),(9),(10),(11),(12);sqlselect seg_sql查询连续段最后一个id

题目来源:https://www.nowcoder.com/discuss/480253?type=all&order=time&pos=&page=1&channel=1009&source_id=search_all

数据

create table test
(
  id int
);

insert into test values 
(1),
(2),
(4),
(5),
(6),
(9),
(10),
(11),
(12)
;

sql

select segment_max, count(id) as `count`
from
(
  select t3.id, min(t2.id) as segment_max
  from test t3 left join
  (
    select id from test t1 where not exists
    (select id from test where id=t1.id+1)
  ) t2
  on t3.id <= t2.id
  group by t3.id
) t4
group by segment_max
;

让我来解释一下吧,先查询每个数据段的最大值

select id from test t1 where not exists
(select id from test where id=t1.id+1);


然后,在原数据上增加一列:

select t3.id, min(t2.id) as segment_max
from test t3 left join
(
  select id from test t1 where not exists
  (select id from test where id=t1.id+1)
) t2
on t3.id <= t2.id
group by t3.id;

接下来就简单了吧,直接聚合计数即可!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服