ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 20451|回复: 50

[精华] 如何sql查询出连续号码段 [复制链接]

注册会员

一般会员

精华贴数
1
技术积分
451
社区积分
6
注册时间
2001-12-13
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33CTO参与奖
日期:2009-02-20 09:44:20
发表于 2005-4-26 16:16:00 |显示全部楼层
问题求助,请高手指点..

我有一个表结构,
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
技术积分
52
社区积分
0
注册时间
2004-11-3
论坛徽章:
0
发表于 2005-4-26 17:04:18 |显示全部楼层
只用一个sql语句我也写不出来这个结果,如果写个过程还行
期待高手的答案

使用道具 举报

注册会员

高级会员

精华贴数
2
技术积分
2381
社区积分
19
注册时间
2004-9-17
论坛徽章:
5
数据库板块每日发贴之星
日期: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
发表于 2005-4-26 19:28:19 |显示全部楼层
这个有意思,容我仔细想一想。

使用道具 举报

注册会员

高级会员

精华贴数
2
技术积分
2381
社区积分
19
注册时间
2004-9-17
论坛徽章:
5
数据库板块每日发贴之星
日期: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
发表于 2005-4-26 19:55:07 |显示全部楼层
抛一块砖

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

使用道具 举报

精华贴数
0
技术积分
4065
社区积分
43
注册时间
2004-7-22
论坛徽章:
12
2010新春纪念徽章
日期:2010-03-01 11:08:332011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08
发表于 2005-4-26 22:35:16 |显示全部楼层
  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
复制代码

使用道具 举报

注册会员

资深会员

精华贴数
0
技术积分
1634
社区积分
5
注册时间
2004-7-17
论坛徽章:
1
BLOG每日发帖之星
日期:2010-02-09 01:01:02
发表于 2005-4-27 11:10:15 |显示全部楼层
UP,
又學了一點.

使用道具 举报

注册会员

一般会员

精华贴数
1
技术积分
451
社区积分
6
注册时间
2001-12-13
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33CTO参与奖
日期:2009-02-20 09:44:20
发表于 2005-4-28 15:47:35 |显示全部楼层
多谢hmxxyy和jametong,问题解决

使用道具 举报

注册会员

高级会员

精华贴数
2
技术积分
2381
社区积分
19
注册时间
2004-9-17
论坛徽章:
5
数据库板块每日发贴之星
日期: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
发表于 2005-4-30 00:54:46 |显示全部楼层
还真引出玉来了

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

绝!

使用道具 举报

注册会员

我当妈了

精华贴数
0
技术积分
652
社区积分
13084
注册时间
2003-11-13
论坛徽章:
13
授权会员
日期:2005-11-14 13:51:46会员2007贡献徽章
日期:2007-09-26 18:42:10IT宝贝
日期:2009-06-15 13:53:22
发表于 2005-4-30 08:17:10 |显示全部楼层
学习,谢谢!

使用道具 举报

注册会员

永不言棄

精华贴数
2
技术积分
8349
社区积分
20034
注册时间
2004-11-18
论坛徽章:
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巴塞罗那
日期:2009-11-10 11:13:19季节之章:夏
日期:2009-06-24 19:19:59
发表于 2005-4-30 10:12:22 |显示全部楼层
收了

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部