none
Consulta de salto de sequência RRS feed

  • Pergunta

  • Boa tarde,

    Preciso fazer um Select que identifique saltos de sequencial em uma tabela.

    Ex:

    NotaFiscal

    500

    501

    503

    506

    No caso acima o select identificar que estão faltando na sequência os números 502, 504 e 505

    Se alguém puder ajudar eu agradeço.

    sexta-feira, 16 de fevereiro de 2018 20:08

Respostas

  • De forma objetiva , da pra resolver assim ,segue um exemplo

    DECLARE @NotasFiscais TABLE (CodNotaFiscal INT);
    
    INSERT INTO @NotasFiscais (CodNotaFiscal)
    VALUES (500),
    (501   ),
    (503   ),
    (506   );
    
    
    
    DECLARE @MinValue INT = (SELECT MIN(NF.CodNotaFiscal) FROM @NotasFiscais AS NF);
    DECLARE @MaxValue INT = (SELECT MAX(NF.CodNotaFiscal) FROM @NotasFiscais AS NF);
    WITH Intervalo
      AS (	SELECT @MinValue AS Numero
    		UNION ALL
    		SELECT I.Numero + 1
            FROM Intervalo I
    		WHERE I.Numero < @MaxValue
    	  )
    SELECT Intervalo.Numero,
           NF.CodNotaFiscal
      FROM Intervalo
      LEFT JOIN @NotasFiscais AS NF
        ON Intervalo.Numero = NF.CodNotaFiscal
    	WHERE NF.CodNotaFiscal IS NULL
    OPTION (MAXRECURSION 0)
    
    
    
    

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    sexta-feira, 23 de fevereiro de 2018 15:06

Todas as Respostas

  • Deleted
    sexta-feira, 16 de fevereiro de 2018 21:19
  • Já passei por essa.. 

    eis uma abordagem que me ajudou:

    https://social.technet.microsoft.com/wiki/contents/articles/18399.t-sql-gaps-and-islands-problem.aspx

    quinta-feira, 22 de fevereiro de 2018 21:07
  • De forma objetiva , da pra resolver assim ,segue um exemplo

    DECLARE @NotasFiscais TABLE (CodNotaFiscal INT);
    
    INSERT INTO @NotasFiscais (CodNotaFiscal)
    VALUES (500),
    (501   ),
    (503   ),
    (506   );
    
    
    
    DECLARE @MinValue INT = (SELECT MIN(NF.CodNotaFiscal) FROM @NotasFiscais AS NF);
    DECLARE @MaxValue INT = (SELECT MAX(NF.CodNotaFiscal) FROM @NotasFiscais AS NF);
    WITH Intervalo
      AS (	SELECT @MinValue AS Numero
    		UNION ALL
    		SELECT I.Numero + 1
            FROM Intervalo I
    		WHERE I.Numero < @MaxValue
    	  )
    SELECT Intervalo.Numero,
           NF.CodNotaFiscal
      FROM Intervalo
      LEFT JOIN @NotasFiscais AS NF
        ON Intervalo.Numero = NF.CodNotaFiscal
    	WHERE NF.CodNotaFiscal IS NULL
    OPTION (MAXRECURSION 0)
    
    
    
    

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    sexta-feira, 23 de fevereiro de 2018 15:06