學習 SQL查詢連續號碼段的巧妙解法

2021-04-22 05:47:08 字數 1208 閱讀 6570

在itpub上有一則非常巧妙的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

itpub上的朋友給出了乙個非常巧妙的答案:

sql> select b.fphm, min (b.kshm) start_hm, max (b.kshm) end_hm

2 from (select a.*, to_number (a.kshm - rownum) cc

3 from (select *

4 from t

5 order by fphm, kshm) a) b

6 group by b.fphm, b.cc

7 /fphm start_hm end_hm

---------- -------- --------

2013 00000120 00000122

2013 00000124 00000125

2014 00000001 00000005

2014 00000007 00000009

巧思妙想,就在一念之間。

itpub其他參考鏈結如下:

SQL查詢連續號碼段

測試資料 create table stest fphm int,kshm nvarchar 10 insert into stest select 2014,00000001 union all select 2014,00000002 union all select 2014,00000003...

SQL語句集錦 尋找連續號碼的斷號值

問題一 table t,列 serial no 我想能夠查詢一下serial no這個欄位的不連續的值。例如 serial no12 3468 910我想乙個sql語句查出來缺失的號碼,顯示結果為 57 解決方法 select ordered t2.serial no 1 min t3 serial...

查詢陣列的最大連續子段

求n個數組成的序列a 1 a 2 a 3 a n 序列中連續子段的和的最大值,例如 2,11,4,13,5,2 的最大子段是 11,4,13 和為20 嘗試著雙重迴圈一下 如下 array array 2,11,4,13,5,2 function find son set array arsort ...