oracle 递归查询求出起点、终点问题的解决方法

本文介绍了一种使用SQL来找出特定字段中连续数值区间的解决方案。通过`START WITH`、`CONNECT BY PRIOR`子句结合`NOT EXISTS`子查询来确定连续序列的起始点,并利用`GROUP BY`按区间进行分组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有表如下:

SQL> select * from yu1;

      COL1 COL2
---------- --------------------
      2014 00000001
      2014 00000002
      2014 00000003
      2014 00000004
      2014 00000005
      2014 00000009
      2014 00000010
      2013 00000013
      2013 00000014
      2013 00000015
      2013 00000017

      COL1 COL2
---------- --------------------
      2013 00000018
      2013 00000020
      2013 00000021

 

欲求出下列结果

col1   start      end

2014  00000001  00000005
2014  00000009  00000010
2013  00000013  00000015
2013  00000017  00000018
2013  00000020  00000021

 

select col1, min(col2) "start" , max(col2) "end"
from yu1 a
start with not exists (select 1 from yu1 b where b.col2 = a.col2 - 1)
connect by prior a.col2 = a.col2 - 1
group by rownum - level, col1; 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值