2017-07-03 6 views
0

ベース:How to check any missing number from a series of numbers?欠落している番号のシーケンスを確認する方法

私は似たような質問があります。私のソーステーブルは1から1000までのシーケンスを持っています。 ギャップが1より大きく、<の場合にのみ悪いです。私はCONNECT BYを動作させることができません。

私を助けてください。

SELECT 
    'XX' AS NETWORK 
    ,'YY' AS TYPE 
    ,min_seq - 1 + level AS MISSING 
FROM ( 
    select 
     min(s.SEQUENCE_NUMBER) min_seq 
     , max(s.SEQUENCE_NUMBER) max_seq 
    FROM source s 
) 
CONNECT BY level <= max_seq - min_seq +20 AND level >= max_seq - min_seq +1 
MINUS 
SELECT 
    'XX' AS NETWORK 
    ,'YY' AS TYPE 
    ,s.SEQUENCE_NUMBER AS EXISTING 
FROM source s 

答えて

0

オールドスクールconnect byバージョン

with tn as(
    -- sample data 
    Select 1 n from dual 
    union all 
    Select 4 from dual 
    union all 
    Select 26 from dual 
    union all 
    Select 30 from dual 
    union all 
    Select 52 from dual 
) 
select distinct n, delta, n+level nn 
from (
    select n, delta 
    from (
     select n, lead(n) Over(order by n) - n delta 
     from tn) t 
    where delta between 2 and 20 
    ) t2 
connect by level < delta 
order by n 
+0

こんにちはSergを、成功、修正、試してみました!どうもありがとうございました! – DasBen

0

CTE(ステートメントを使用して)使用します。

with CTE as 
(
select level as NN 
from dual 
connect by level <= 20 
) 

select CTE.NN 
from CTE 
left join source s 
    on CTE.NN = s.SEQUENCE_NUMBER 
where s.SEQUENCE_NUMBER is null 
関連する問題