最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL查詢連續(xù)號(hào)碼段的巧妙解法

 更新時(shí)間:2013年09月25日 15:16:38   作者:  
在ITPUB上有一則非常巧妙的SQL技巧,學(xué)習(xí)一下,記錄在這里

昨天在itpub看到這個(gè)帖子, 問(wèn)題覺(jué)得有意思,, 就仔細(xì)想了想. 也給出了一種解決辦法..:-)

問(wèn)題求助,請(qǐng)高手指點(diǎn)..

我有一個(gè)表結(jié)構(gòu),
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

(第二個(gè)字段內(nèi)可能是連續(xù)的數(shù)據(jù),可能存在斷點(diǎn)。)

怎樣能查詢出來(lái)這樣的結(jié)果,查詢出連續(xù)的記錄來(lái)。

就像下面的這樣?

2014,00000001,00000005
2014,00000009,00000007
2013,00000120,00000122
2013,00000124,00000125

方法一: 引用自hmxxyy.

復(fù)制代碼 代碼如下:

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

方法二: 使用lag/lead分析函數(shù)進(jìn)行處理.. 樓上的方法確實(shí)挺好用就是覺(jué)得表掃描/表連接比較多, 可能數(shù)據(jù)量大了. 速度會(huì)比較慢, 當(dāng)然我的這種方法由于使用分析函數(shù)使用的比較頻繁.所以排序量可能比上一種要多..

復(fù)制代碼 代碼如下:

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

方法三: 今天早上wildflower給了我這個(gè)答案, 頓時(shí)覺(jué)得耳目一新啊..就貼出來(lái)與大家一起共享了^_^.


SQL> spool aaa.log
SQL> set echo on
SQL> select * from t;

no rows selected

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

      FPHM       KSHM
---------- ----------
      2013        124
      2013        125

13 rows selected.

SQL> @bbb.sql
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  /

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

SQL>

相關(guān)文章

  • RBAC簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    RBAC簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了RBAC簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 大數(shù)據(jù)時(shí)代的數(shù)據(jù)庫(kù)選擇:SQL還是NoSQL?

    大數(shù)據(jù)時(shí)代的數(shù)據(jù)庫(kù)選擇:SQL還是NoSQL?

    執(zhí)行大數(shù)據(jù)項(xiàng)目的企業(yè)面對(duì)的關(guān)鍵決策之一是使用哪個(gè)數(shù)據(jù)庫(kù),SQL還是NoSQL?SQL有著驕人的業(yè)績(jī),龐大的安裝基礎(chǔ);而NoSQL正在獲得可觀的收益,且有很多支持者。我們來(lái)看看兩位專家對(duì)這個(gè)問(wèn)題的看法
    2014-03-03
  • 大數(shù)據(jù)量時(shí)提高分頁(yè)的效率

    大數(shù)據(jù)量時(shí)提高分頁(yè)的效率

    當(dāng)我們?cè)谔幚泶罅繑?shù)據(jù)的時(shí)候,就需要注意分頁(yè)的效率問(wèn)題了,下面大家可以看看
    2009-03-03
  • DBeaver操作數(shù)據(jù)表的拷貝的實(shí)現(xiàn)

    DBeaver操作數(shù)據(jù)表的拷貝的實(shí)現(xiàn)

    這篇文章主要介紹了DBeaver操作數(shù)據(jù)表的拷貝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 一步步教你使用Navicat工具創(chuàng)建MySQL數(shù)據(jù)庫(kù)連接

    一步步教你使用Navicat工具創(chuàng)建MySQL數(shù)據(jù)庫(kù)連接

    Navicat是一套快速、可靠并價(jià)格相當(dāng)便宜的數(shù)據(jù)庫(kù)管理工具,專為簡(jiǎn)化數(shù)據(jù)庫(kù)的管理及降低系統(tǒng)管理成本而設(shè),下面這篇文章主要給大家介紹了關(guān)于如何使用Navicat工具創(chuàng)建MySQL數(shù)據(jù)庫(kù)連接的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • SQL中IS NOT NULL與!=NULL的區(qū)別

    SQL中IS NOT NULL與!=NULL的區(qū)別

    這篇文章主要介紹了SQL中IS NOT NULL與!=NULL的區(qū)別,本文詳細(xì)訴說(shuō)了它們的區(qū)別,以及推薦使用方法,需要的朋友可以參考下
    2015-06-06
  • 數(shù)據(jù)庫(kù)的三級(jí)模式和兩級(jí)映射介紹

    數(shù)據(jù)庫(kù)的三級(jí)模式和兩級(jí)映射介紹

    在這里大家一定要注意三級(jí)模式中的概念模式對(duì)應(yīng)的是數(shù)據(jù)庫(kù)設(shè)計(jì)的邏輯模型,而不是概念模型(E-R模型),一定不要弄混了
    2012-10-10
  • redis安裝、配置、使用和redis php擴(kuò)展安裝教程

    redis安裝、配置、使用和redis php擴(kuò)展安裝教程

    這篇文章主要介紹了redis安裝、配置、使用和redis php擴(kuò)展安裝教程,其中redis使用的是編譯安裝,同時(shí)介紹了redis常用配置說(shuō)明、常用命令,要的朋友可以參考下
    2014-05-05
  • 解決mac上Navicat新建數(shù)據(jù)庫(kù)3680錯(cuò)誤問(wèn)題

    解決mac上Navicat新建數(shù)據(jù)庫(kù)3680錯(cuò)誤問(wèn)題

    這篇文章主要介紹了mac上Navicat新建數(shù)據(jù)庫(kù)3680錯(cuò)誤解決辦法,很多朋友遇到這個(gè)問(wèn)題不知道該如何解決,網(wǎng)上一搜一大把,但是不能解決核心問(wèn)題,下面小編把我的解決過(guò)程分享給大家,需要的朋友可以參考下
    2021-11-11
  • 達(dá)夢(mèng)數(shù)據(jù)庫(kù)(DM數(shù)據(jù)庫(kù))的查詢與操作指南

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)(DM數(shù)據(jù)庫(kù))的查詢與操作指南

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)是一款具有自主知識(shí)產(chǎn)權(quán)的高性能數(shù)據(jù)庫(kù)管理系統(tǒng),這篇文章詳細(xì)介紹了其基本操作、數(shù)據(jù)表操作、數(shù)據(jù)查詢操作及其他常用操作,幫助讀者更好地掌握和使用這款數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2025-02-02

最新評(píng)論

连城县| 临漳县| 桑日县| 全南县| 江都市| 新平| 襄樊市| 响水县| 本溪| 方山县| 镇平县| 东明县| 清原| 昌吉市| 突泉县| 柯坪县| 高平市| 佳木斯市| 社旗县| 义乌市| 云阳县| 阿拉善盟| 庆安县| 冕宁县| 郑州市| 赤峰市| 屏东县| 重庆市| 阳春市| 华池县| 喀喇| 吉木乃县| 张家口市| 沙湾县| 连山| 长兴县| 广宗县| 凉城县| 千阳县| 尉氏县| 汉川市|