在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 ...