SQL 根據連續區間 生成資料。 區間拆分

2021-07-05 13:30:53 字數 1554 閱讀 3775

看到乙個 需求 特別有意思, 區間拆分。 恰巧和前面文章 哥說的,  區間合併需求相反, 以前 做的是 1-10,  11- 20  合併成  1-20  。

現在這個 需求相反  是 1-10, 拆分成  1,2,3,4,5,6,7,8,9,10 .   我的sql語句中大多是查詢 資料, 現在是 在查詢到的資料範圍中, 生成對應資料。  

如圖:--問題1.表結構和資料如下:

--帳號           支票本編號      支票號範圍   

--ac_no      chq_id              chq_range

--601001       1                      100-150

--601001       2                      200-300

--要求結果顯示如下:

--ac_no      chq_id          chq_number

--601001       1                      100

--601001       1                      101

--601001       1                      150

--601001       2                      200

--601001       2                      201

--。。。。

--601001       2                      300

with tab1 as(

select 601001 ac_no,  1 chq_id,  '10-15' chq_number  from dual

union all

select 601002 ac_no,  2 chq_id,  '20-30' chq_number  from dual

),tab2 as(select  tab1.*,  to_number( regexp_substr(chq_number, '[^-]+',1, 1)) re1, to_number(regexp_substr(chq_number, '[^-]+',1, 2)) re12

from  tab1

)select ac_no,chq_id, re1+level-1,chq_number   from  tab2

connect by level <=re12-re1+1 and  prior ac_no = ac_no

and ( prior dbms_random.value() ) is not null ; 

ora-01436 :使用者資料中的connect by 迴圈 ----》  proir  dbma_random.value();

今天 這道題目 哥想到另外一種解發,  效率上面可能存在問題。

解法:   查詢出  最大, 最小值,  以及最值之間的 差異,

然後 運用 connect  by  生成 資料, 最後用外連線 獲取資料, 外連線上面 再用 lag  或者 lead 函式 獲取 其他列資料



連續區間和模板

水果店裡有 nn個水果排成一列。店長要求顧客只能買一段連續的水果。小陽對每個水果都有乙個喜愛程度 aiai,最終的滿意度為他買到的水果的喜歡程度之和。如果和為正 不管是正多少,只要大於 0 即可 他就滿意了。小陽想知道在他滿意的條件下最多能買多少個水果。你能幫幫他嗎?第一行輸入乙個正整數 n,表示水...

線段樹區間合併 連續區間問題

hdu 1540 資料很奇葩。用討論區裡面的話形容這題很合適 九九八十一難,這道題比北大的資料真是坑出翔來了 poj 2892 原題 一摸一樣 題意 給定n個村莊排成一行,它們相鄰的村莊通過地道相連,有三種操作 1 炸毀第x個村莊 2 修復上乙個被炸毀的村莊 3 詢問 輸出 第x個村莊還能和幾個村莊...

dp m段連續區間和

問題描述 最大m子段和問題 給定由 n個整數 可能為負整數 組成的序列a1,a2,a3,an,以及乙個正整數 m,要求確定序列 a1,a2,a3,an的 m個不相交子段,使這m個子段的總和達到最大,求出最大和。用dp i j 來表示在前j個數中,以a j 結尾並分為i段的最大和。dp i j max...