ITPUB??ì3
ITPUB论坛 » Oracle开发 » 如何sql查询出连续号码段

标题: [精华] 如何sql查询出连续号码段
离线 reborn
一般会员



精华贴数 1
个人空间 0
技术积分 447 (4864)
社区积分 6 (15281)
注册日期 2001-12-13
论坛徽章:2
CTO参与奖授权会员    
      

发表于 2005-4-26 16:16 
如何sql查询出连续号码段

问题求助,请高手指点..

我有一个表结构,
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
个人空间 0
技术积分 52 (29532)
社区积分 0 (202354)
注册日期 2004-11-3
论坛徽章:0
      
      

发表于 2005-4-26 17:04 
只用一个sql语句我也写不出来这个结果,如果写个过程还行
期待高手的答案


__________________
为什么老是说我不是一个有效的thread,nnd,什么破论坛
只看该作者    顶部
离线 hmxxyy
高级会员


精华贴数 2
个人空间 0
技术积分 2381 (750)
社区积分 19 (8800)
注册日期 2004-9-17
论坛徽章:5
会员2006贡献徽章授权会员ITPUB新首页上线纪念徽章数据库板块每日发贴之星数据库板块每日发贴之星 
      

发表于 2005-4-26 19:28 
这个有意思,容我仔细想一想。


__________________
http://hmxxyy.itpub.net只听胡琴声缠绵宛转,却是一曲《凤求凰》...
只看该作者    顶部
离线 hmxxyy
高级会员


精华贴数 2
个人空间 0
技术积分 2381 (750)
社区积分 19 (8800)
注册日期 2004-9-17
论坛徽章:5
会员2006贡献徽章授权会员ITPUB新首页上线纪念徽章数据库板块每日发贴之星数据库板块每日发贴之星 
      

发表于 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


__________________
http://hmxxyy.itpub.net只听胡琴声缠绵宛转,却是一曲《凤求凰》...
只看该作者    顶部
离线 jametong
test test



精华贴数 0
个人空间 0
技术积分 3633 (455)
社区积分 43 (5953)
注册日期 2004-7-22
论坛徽章:6
管理团队成员参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星
      

发表于 2005-4-26 22:35 


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

      FPHM KSHM                                                                 
---------- ----------------                                                     
      2014 00000001                                                            
      2014 00000002                                                            
      2014 00000003                                                            
      2014 00000004                                                            
      2014 00000005                                                            
      2014 00000007                                                            
      2014 00000008                                                            
      2014 00000009                                                            
      2013 00000120                                                            
      2013 00000121                                                            
      2013 00000122                                                            

      FPHM KSHM                                                                 
---------- ----------------                                                     
      2013 00000124                                                            
      2013 00000125                                                            

13 rows selected.

SQL> set echo on
SQL> @bbb.sql
SQL> select fphm,lpad(kshm,8,'0') start_kshm,lpad(prev_prev_kshm,8,'0') end_kshm
  2  from (
  3    select fphm,kshm,next_kshm,prev_kshm,
  4           lag(kshm,1,null) over (partition by fphm order by kshm )next_next_kshm,
  5           lead(kshm,1,null) over (partition by fphm order by kshm ) prev_prev_kshm
  6    from (
  7           select *
  8           from (
  9             select fphm,kshm,
10               lead(kshm,1,null) over (partition by fphm order by kshm) next_kshm,
11               lag(kshm,1,null) over (partition by fphm order by kshm) prev_kshm
12             from t
13           )
14           where ( next_kshm - kshm <> 1 or kshm - prev_kshm <> 1 )
15           or ( next_kshm is null or prev_kshm is null )
16    )
17  )
18  where next_kshm - kshm = 1
19  /

      FPHM START_KSHM       END_KSHM                                            
---------- ---------------- ----------------                                    
      2013 00000120         00000122                                            
      2013 00000124         00000125                                            
      2014 00000001         00000005                                            
      2014 00000007         00000009                                            

SQL> spool off




__________________
learning Expert One on One Oraclehttp://blog.itpub.net/jametong
只看该作者    顶部
离线 longwansheng
资深会员


来自 廣東深圳
精华贴数 0
个人空间 0
技术积分 1620 (1178)
社区积分 5 (17284)
注册日期 2004-7-17
论坛徽章:0
      
      

发表于 2005-4-27 11:10 
UP,
又學了一點.


__________________
在oracle erp維護與分析開發中..................................
Email: longwsheng@gmail.com
MSN:longwsheng@hotmail.com
QQ:82003806
歡迎加為好友,共同it共同成長^^_^^^^_^^^^_^^^^_^^^^_^^^^
只看该作者    顶部
离线 reborn
一般会员



精华贴数 1
个人空间 0
技术积分 447 (4864)
社区积分 6 (15281)
注册日期 2001-12-13
论坛徽章:2
CTO参与奖授权会员    
      

发表于 2005-4-28 15:47 
多谢hmxxyy和jametong,问题解决


只看该作者    顶部
离线 hmxxyy
高级会员


精华贴数 2
个人空间 0
技术积分 2381 (750)
社区积分 19 (8800)
注册日期 2004-9-17
论坛徽章:5
会员2006贡献徽章授权会员ITPUB新首页上线纪念徽章数据库板块每日发贴之星数据库板块每日发贴之星 
      

发表于 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

绝!


__________________
http://hmxxyy.itpub.net只听胡琴声缠绵宛转,却是一曲《凤求凰》...
只看该作者    顶部
离线 呆呆木
我当妈妈了


精华贴数 0
个人空间 0
技术积分 647 (3306)
社区积分 12963 (141)
注册日期 2003-11-13
论坛徽章:13
会员2007贡献徽章会员2006贡献徽章玉石琵琶蓝色妖姬授权会员IT宝贝
2008北京奥运纪念徽章:拳击2008北京奥运纪念徽章:垒球生肖徽章:狗生肖徽章:龙生肖徽章:猪生肖徽章:羊

发表于 2005-4-30 08:17 
学习,谢谢!


只看该作者    顶部
离线 shiguibao
永不言棄


精华贴数 2
个人空间 130
技术积分 7067 (218)
社区积分 17425 (103)
注册日期 2004-11-18
论坛徽章:69
奥运纪念徽章铜牌徽章八级虎吧徽章阿森纳巴塞罗那迈阿密热火
印第安纳步行者2009新春纪念徽章2008北京奥运纪念徽章:羽毛球2008北京奥运纪念徽章:击剑2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:排球

发表于 2005-4-30 10:12 
收了


__________________
现实是残酷的,更残酷的是你永远也看不到现实的全部

来虎吧玩玩吧
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰网域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:060528号 联系我们 法律顾问