Oracle中实现sql查询得到连续号码段

Posted 闪亮的金子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中实现sql查询得到连续号码段相关的知识,希望对你有一定的参考价值。

一、表名为t的表中数据如下:

select * from t;
      FPHM       KSHM
---------- ----------
      2014          1
      2014          2
      2014          3
      2014          4
      2014          5
      2014          7
      2014          8
      2014          9
      2013        120
      2013        121
      2013        122
      2013        124
      2013        125

实现代码如下:

select b.fphm,min(b.kshm),max(b.kshm)
    from (
            select a.*,to_number(a.kshm-rownum) cc
            from (
                    select * from t order by fphm,kshm
            ) a
    )  b
    group by b.fphm,b.cc

结果如下:

FPHM            MIN(B.KSHM)   MAX(B.KSHM)
---------- ----------- ------------------
      2013         120         122
      2013         124         125
      2014           1           5
      2014           7           9

------------------------------------------------------------------------------------------------------------------------

二、表名为gap的表中数据如下:

select * from gap;

ID SEQ
---------- ----------
1 1
1 4
1 5
1 8
2 1
2 2
2 9

实现代码如下:

select res1.id, res2.seq str, res1.seq end
from (
    select rownum rn, c.*
    from (
        select *
        from gap a
        where not exists (
            select null from gap b where b.id = a.id and a.seq = b.seq - 1
        )
        order by id, seq
    ) c
) res1, (
    select rownum rn, d.*
    from (
        select *
        from gap a
        where not exists (
            select null from gap b where b.id = a.id and a.seq = b.seq + 1
        )
        order by id, seq
    ) d
) res2
where res1.id = res2.id
and res1.rn = res2.rn

结果如下:

ID STR END
--------- ---------- ----------
1 1 1
1 4 5
1 8 8
2 1 2
2 9 9

以上是关于Oracle中实现sql查询得到连续号码段的主要内容,如果未能解决你的问题,请参考以下文章

java中数据库中实现分页的sql语句要求每页十条要查询的是第二页

Oracle&SQLServer中实现跨库查询

利用管道在SQL中实现查询分页显示和筛选

PL/SQL 和 Oracle Forms Builder

sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li

我们如何在 Oracle SQL 或 PL/SQL 中实现 Standard Normal CDF?