查看: 72986|回复: 84

[精华] 如何sql查询出连续号码段

[复制链接]
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33CTO参与奖
日期:2009-02-20 09:44:20
跳转到指定楼层
1#
发表于 2005-4-26 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题求助,请高手指点..

我有一个表结构,
fphm,kshm
2014,00000001
2014,00000002
2014,00000003
2014,00000004
2014,00000005
2014,00000007
2014,00000008
2014,00000009
2013,00000120
2013,00000121
2013,00000122
2013,00000124
2013,00000125

(第二个字段内可能是连续的数据,可能存在断点。)

怎样能查询出来这样的结果,查询出连续的记录来。
就像下面的这样?
2014,00000001,00000005
2014,00000009,00000007
2013,00000120,00000122
2013,00000124,00000125
论坛徽章:
0
2#
发表于 2005-4-26 17:04 | 只看该作者
只用一个sql语句我也写不出来这个结果,如果写个过程还行
期待高手的答案

使用道具 举报

回复
论坛徽章:
7
数据库板块每日发贴之星
日期:2005-03-27 01:01:21数据库板块每日发贴之星
日期:2005-05-08 01:01:23授权会员
日期:2005-11-05 17:10:38会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44喜羊羊
日期:2015-03-04 14:49:392015年新春福章
日期:2015-03-06 11:57:31
3#
发表于 2005-4-26 19:28 | 只看该作者
这个有意思,容我仔细想一想。

使用道具 举报

回复
论坛徽章:
7
数据库板块每日发贴之星
日期:2005-03-27 01:01:21数据库板块每日发贴之星
日期:2005-05-08 01:01:23授权会员
日期:2005-11-05 17:10:38会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44喜羊羊
日期:2015-03-04 14:49:392015年新春福章
日期:2015-03-06 11:57:31
4#
发表于 2005-4-26 19:55 | 只看该作者
抛一块砖

SQL> 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

使用道具 举报

回复
论坛徽章:
22
2010新春纪念徽章
日期:2010-03-01 11:08:33马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
5#
发表于 2005-4-26 22:35 | 只看该作者

  1. SQL> select fphm,lpad(kshm,8,'0') kshm
  2.   2  from t
  3.   3  /

  4.       FPHM KSHM                                                                 
  5. ---------- ----------------                                                     
  6.       2014 00000001                                                            
  7.       2014 00000002                                                            
  8.       2014 00000003                                                            
  9.       2014 00000004                                                            
  10.       2014 00000005                                                            
  11.       2014 00000007                                                            
  12.       2014 00000008                                                            
  13.       2014 00000009                                                            
  14.       2013 00000120                                                            
  15.       2013 00000121                                                            
  16.       2013 00000122                                                            

  17.       FPHM KSHM                                                                 
  18. ---------- ----------------                                                     
  19.       2013 00000124                                                            
  20.       2013 00000125                                                            

  21. 13 rows selected.

  22. SQL> set echo on
  23. SQL> @bbb.sql
  24. SQL> select fphm,lpad(kshm,8,'0') start_kshm,lpad(prev_prev_kshm,8,'0') end_kshm
  25.   2  from (
  26.   3    select fphm,kshm,next_kshm,prev_kshm,
  27.   4           lag(kshm,1,null) over (partition by fphm order by kshm )next_next_kshm,
  28.   5           lead(kshm,1,null) over (partition by fphm order by kshm ) prev_prev_kshm
  29.   6    from (
  30.   7           select *
  31.   8           from (
  32.   9             select fphm,kshm,
  33. 10               lead(kshm,1,null) over (partition by fphm order by kshm) next_kshm,
  34. 11               lag(kshm,1,null) over (partition by fphm order by kshm) prev_kshm
  35. 12             from t
  36. 13           )
  37. 14           where ( next_kshm - kshm <> 1 or kshm - prev_kshm <> 1 )
  38. 15           or ( next_kshm is null or prev_kshm is null )
  39. 16    )
  40. 17  )
  41. 18  where next_kshm - kshm = 1
  42. 19  /

  43.       FPHM START_KSHM       END_KSHM                                            
  44. ---------- ---------------- ----------------                                    
  45.       2013 00000120         00000122                                            
  46.       2013 00000124         00000125                                            
  47.       2014 00000001         00000005                                            
  48.       2014 00000007         00000009                                            

  49. SQL> spool off
复制代码

使用道具 举报

回复
论坛徽章:
1
BLOG每日发帖之星
日期:2010-02-09 01:01:02
6#
发表于 2005-4-27 11:10 | 只看该作者
UP,
又學了一點.

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33CTO参与奖
日期:2009-02-20 09:44:20
7#
 楼主| 发表于 2005-4-28 15:47 | 只看该作者
多谢hmxxyy和jametong,问题解决

使用道具 举报

回复
论坛徽章:
7
数据库板块每日发贴之星
日期:2005-03-27 01:01:21数据库板块每日发贴之星
日期:2005-05-08 01:01:23授权会员
日期:2005-11-05 17:10:38会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44喜羊羊
日期:2015-03-04 14:49:392015年新春福章
日期:2015-03-06 11:57:31
8#
发表于 2005-4-30 00:54 | 只看该作者
还真引出玉来了

SQL> select b.fphm,min(b.kshm),max(b.kshm)
  2  from (
  3          select a.*,to_number(a.kshm-rownum) cc
  4          from (
  5                  select * from t order by fphm,kshm
  6          ) a
  7  )  b
  8  group by b.fphm,b.cc
  9  /

引自http://blog.itpub.net/post/5042/27936

绝!

使用道具 举报

回复
论坛徽章:
13
授权会员
日期:2005-11-14 13:51:46会员2007贡献徽章
日期:2007-09-26 18:42:10IT宝贝
日期:2009-06-15 13:53:22
9#
发表于 2005-4-30 08:17 | 只看该作者
学习,谢谢!

使用道具 举报

回复
论坛徽章:
85
2008新春纪念徽章
日期:2008-02-13 12:43:03双黄蛋
日期:2011-06-17 11:07:502011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-04 10:24:022010年世界杯参赛球队:荷兰
日期:2010-08-28 00:09:112010年世界杯参赛球队:科特迪瓦
日期:2010-03-02 12:36:542010新春纪念徽章
日期:2010-03-01 11:07:242010新春纪念徽章
日期:2010-03-01 11:07:242010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:意大利
日期:2009-12-31 14:41:24
10#
发表于 2005-4-30 10:12 | 只看该作者
收了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表