none
Selecionar último arquivo do banco e selecionar arquivo da hora anterior ao último. RRS feed

  • Pergunta

  • Bom dia,

    Pessoal eu tenho uma estrutura no meu banco em que recebe arquivos de hora em hora.

    Alguém sabe como montar uma query que selecione o arquivo da última hora enviado e o da hora anterior afim de comparar? 

                                                                   

    Arquivo dtt_data_insercao
    BUSCA_HORA_201707112300_out_ow.csv 2017-07-12 00:03:51
    BUSCA_HORA_201707120000_out_ow.csv 2017-07-12 00:59:32
    BUSCA_HORA_201707121235_out_ow.csv 2017-07-12 13:34:32
    BUSCA_HORA_201707121500_out_ow.csv 2017-07-12 16:13:35

    Por exemplo quero selecionar o último arquivo guardado 16:13:35 e selecionar o penultimo arquivo da hora anterior 13:34:32.

    Então ele sempre tem que pegar o ultimo arquivo e o penultimo arquivo afim de comparar.

    Após buscar dois arquivos carregados, vou na tabela para comparar os dados dentro deles

    OBJETIVO: Entre 8: 50 e 23: 50 (com intervalo de uma em uma hora) ele executa uma checagem em um arquivo desse banco que chamo de Busca Hora com o Padrão estabelecido. Ele procura o arquivo mais recente e o arquivo da hora anterior e compara.

    Dentro desse arquivo tenho a tabela com os campos

            dtt_data    dtt_hora    int_paradas flt_base    vch_classe_tarifaria    flt_value   vch_classe_tarifaria_1  dtt_data_captura    vch_nome_arquivo
        7/19/2017   10:55:00    1   788.9   JOOQDGZ 788.9   JOOQDGZ 7/12/2017   BUSCA_HORA_201707122000_out_ow.csv
        7/19/2017   10:55:00    1   788.9   JOOQDGZ 788.9   JOOQDGZ 7/12/2017   BUSCA_HORA_201707122000_out_ow.csv
        7/19/2017   6:05:00 1   788.9   JOOQDGZ 788.9   JOOQDGZ 7/12/2017   BUSCA_HORA_201707122000_out_ow.csv
        7/19/2017   2:00:00 1   594.9   PPOSDGZ 594.9   PPOSDGZ 7/12/2017   
    BUSCA_HORA_201707122000_out_ow.csv

    Então comparar e trazer três resultados:

    New

    Trazer resultado que existem no arquivo Agora e que não existiam no arquivo Anterior de uma hora atrás

    Not Found

    Trazer resultado que existem no arquivoAnterior de uma hora atrás e que não existiam no arquivo Agora

    Modified

    Trazer resultado dos dois de tudo que foi modificado

    Fiz algo mais ou menos assim:

    Select * from #Agora AG Left Join #Agora1 AG1 ON AG.vch_classe_tarifaria_1 = AG1.vch_classe_tarifaria_1

    Select * from #Agora1 AG Left Join #Agora AG1 ON AG.vch_classe_tarifaria_1 = AG1.vch_classe_tarifaria_1

    Select * from #Agora
    except
    Select * from #Agora1

    Gostaria de ajuda para montar as três consultas

    Obrigada


    segunda-feira, 7 de agosto de 2017 12:29

Respostas

  • Bom dia Thaís  veja se isso resolve 

    DECLARE @tabela TABLE
        (
          IdArquivo INT NOT NULL
                        IDENTITY(1, 1) ,
          DataInsercao DATETIME
        );
    
    INSERT  INTO @tabela
            ( DataInsercao )
    VALUES  ( '2017-08-04 09:21:10.053' ),
            ( '2017-08-04 09:19:57.567' ),
            ( '2017-07-26 10:13:56.193' ),
            ( '2017-07-26 10:12:34.963' ),
            ( '2017-07-18 09:56:56.603' ),
            ( '2017-07-05 16:58:11.277' ),
            ( '2017-07-04 10:49:24.277' ),
            ( '2017-07-04 10:42:20.213' ),
            ( '2017-07-03 17:02:12.257' ),
            ( '2017-07-03 16:51:22.737' ),
            ( '2017-07-03 16:44:56.320' ),
            ( '2017-06-30 15:01:44.670' ),
            ( '2017-06-30 14:44:48.533' ),
            ( '2017-06-30 14:43:34.333' );
    
    
    SELECT TOP 2
            T.IdArquivo ,
            T.DataInsercao,
    		Ordem = ROW_NUMBER() OVER(ORDER BY T.DataInsercao DESC)
    FROM    @tabela AS T
    ORDER BY T.DataInsercao DESC;

    Leia esses artigos abaixo 

    Sugestão de Consultas:

    https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql

    https://www.codeproject.com/Articles/308281/How-to-Use-ROW-NUMBER-to-Enumerate-and-Partition-R

    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves



    Wesley Neves


    segunda-feira, 7 de agosto de 2017 12:58
  • Bom dia,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 14 de agosto de 2017 13:02
    Moderador

Todas as Respostas

  • Bom dia Thaís  veja se isso resolve 

    DECLARE @tabela TABLE
        (
          IdArquivo INT NOT NULL
                        IDENTITY(1, 1) ,
          DataInsercao DATETIME
        );
    
    INSERT  INTO @tabela
            ( DataInsercao )
    VALUES  ( '2017-08-04 09:21:10.053' ),
            ( '2017-08-04 09:19:57.567' ),
            ( '2017-07-26 10:13:56.193' ),
            ( '2017-07-26 10:12:34.963' ),
            ( '2017-07-18 09:56:56.603' ),
            ( '2017-07-05 16:58:11.277' ),
            ( '2017-07-04 10:49:24.277' ),
            ( '2017-07-04 10:42:20.213' ),
            ( '2017-07-03 17:02:12.257' ),
            ( '2017-07-03 16:51:22.737' ),
            ( '2017-07-03 16:44:56.320' ),
            ( '2017-06-30 15:01:44.670' ),
            ( '2017-06-30 14:44:48.533' ),
            ( '2017-06-30 14:43:34.333' );
    
    
    SELECT TOP 2
            T.IdArquivo ,
            T.DataInsercao,
    		Ordem = ROW_NUMBER() OVER(ORDER BY T.DataInsercao DESC)
    FROM    @tabela AS T
    ORDER BY T.DataInsercao DESC;

    Leia esses artigos abaixo 

    Sugestão de Consultas:

    https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql

    https://www.codeproject.com/Articles/308281/How-to-Use-ROW-NUMBER-to-Enumerate-and-Partition-R

    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves



    Wesley Neves


    segunda-feira, 7 de agosto de 2017 12:58
  • Bom dia Thaís  veja se isso resolve 

    DECLARE @tabela TABLE
        (
          IdArquivo INT NOT NULL
                        IDENTITY(1, 1) ,
          DataInsercao DATETIME
        );
    
    INSERT  INTO @tabela
            ( DataInsercao )
    VALUES  ( '2017-08-04 09:21:10.053' ),
            ( '2017-08-04 09:19:57.567' ),
            ( '2017-07-26 10:13:56.193' ),
            ( '2017-07-26 10:12:34.963' ),
            ( '2017-07-18 09:56:56.603' ),
            ( '2017-07-05 16:58:11.277' ),
            ( '2017-07-04 10:49:24.277' ),
            ( '2017-07-04 10:42:20.213' ),
            ( '2017-07-03 17:02:12.257' ),
            ( '2017-07-03 16:51:22.737' ),
            ( '2017-07-03 16:44:56.320' ),
            ( '2017-06-30 15:01:44.670' ),
            ( '2017-06-30 14:44:48.533' ),
            ( '2017-06-30 14:43:34.333' );
    
    
    SELECT TOP 2
            T.IdArquivo ,
            T.DataInsercao,
    		Ordem = ROW_NUMBER() OVER(ORDER BY T.DataInsercao DESC)
    FROM    @tabela AS T
    ORDER BY T.DataInsercao DESC;

    Leia esses artigos abaixo 

    Sugestão de Consultas:

    https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql

    https://www.codeproject.com/Articles/308281/How-to-Use-ROW-NUMBER-to-Enumerate-and-Partition-R

    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves



    Wesley Neves


    Obrigada Wesley

    É mais ou menos isso que quero.

    Após trazer somente os dois arquivos, comparar os dados. 

    Mas estará rodando de hora em hora. 

    Para verificar se caso um arquivo tenha um dado que o outro não tenha

    É possível?

    Na minha procedure ele está trazendo apeas um arquivo, o ultimo e quero trazer os dois ultimo e da hora anterior.

      SELECT TOP 2
            [vch_nome_arquivo],
            dtt_data_insercao,
    Ordem = ROW_NUMBER() OVER(ORDER BY dtt_data_insercao DESC)
    FROM    [QL2].[dbo].[tb_arquivo_processado] 
    WHERE [vch_nome_arquivo] like 'G3_OW_BUSCA_HORA_%'
    AND [fk_int_status] IN ('2','4')
    AND [dtt_data_captura] = '2017-07-12'
    ORDER BY dtt_data_insercao DESC;

       BEGIN
       
    -- GRAVAR AS INFORMAÇÕES DA VARIAVEL NA TABELA PARA VALIDAR QUE O MESMO ARQUIVO NÃO SERÁ GRAVADO DUAS VEZES 
     --TRUNCATE TABLE [Tracker].[dbo].[SPECIALS_ARQUIVOS]
     INSERT 
    INTO [Tracker].[dbo].[SPECIALS_ARQUIVOS]([vch_nome_arquivo]) 
    VALUES('G3_OW_BUSCA_HORA_%')

    IF 
    (
    SELECT COUNT([vch_nome_arquivo])
    FROM [Tracker].[dbo].[SPECIALS_ARQUIVOS]
    WHERE [vch_nome_arquivo] = 'G3_OW_BUSCA_HORA_%') = 1

    BEGIN

    -- O RESULTADO DA CONSULTA SERÁ GRAVADO NA TABELA [Tracker].[dbo].[PRICING_QL2] - ANA REGO
      INSERT 
    Into [Tracker].[dbo].[PRICING_QL2]
    segunda-feira, 7 de agosto de 2017 13:14
  • Boa tarde, Thaís Sakamoto. Tudo bem?

    Você conseguiu o que precisava? se ainda não, poderia explicar o que ainda falta?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 11 de agosto de 2017 20:35
    Moderador
  • Bom dia,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 14 de agosto de 2017 13:02
    Moderador