2017-07-03 1 views
0

Basé sur: How to check any missing number from a series of numbers?Comment vérifier la séquence de nombre manquant avec skips recherchés

J'ai une question similaire. Ma table source a une séquence de 1 à 1000. Mais il est seulement mauvais si l'écart est> 1 et < 20. Je ne peux pas obtenir le CONNECT BY au travail.

S'il vous plaît aidez-moi.

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 

Répondre

0

Old school connect by Version

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

Salut Serg, a essayé, modifié, le succès! Merci beaucoup! – DasBen

0

Utilisez un CTE (avec déclaration):

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