查看: 51841|回復: 82

[精華] 如何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備09055130號-4  北京市公安局海淀分局網監中心備案編號:11010802021510 廣播電視節目制作經營許可證:編號(京)字第1149號
  
快速回復 返回頂部 返回列表
30岁的男人干啥赚钱快赚钱多 福彩快乐12开奖结果 广东36选7开奖结果今天晚 体彩十一选五开奖视频 黑龙江快乐十分走势图 上海快3最新开奖走势图 配资炒股找久联优配 北京快乐8基本走势图带连线 安徽十选五开奖结果 浙江11选5走势图一定牛 股票融资的条件