none
Diferença de data dos registros RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma tabela com os seguintes registros:

    Senhas  Data_Redirecionamento
    0001      2019-05-30 08:51:00
    0001       2019-05-30 11:11:00
    0002       2019-06-11 17:22:00
    0002      2019-06-13 13:21:00
    0003       2019-06-10 15:59:00
    0002     2019-06-13 14:00:00

    Quando a senha for a mesma preciso calcular a diferença em horas entre elas.

    quinta-feira, 13 de junho de 2019 20:14

Respostas

  • Bom dia,

    Adalmir, fiquei na dúvida sobre o resultado esperado mas experimente fazer uns testes mais ou menos dessa forma:

    select
        Senhas,
        Data_Redirecionamento,
        lag(Data_Redirecionamento, 1) over(partition by Senhas order by Data_Redirecionamento) as Data_Redirecionamento_Ant,
        datediff
            (hour, 
             lag(Data_Redirecionamento, 1) over(partition by Senhas order by Data_Redirecionamento),
             Data_Redirecionamento) as Diferenca
    from Tabela
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Adalmir sexta-feira, 14 de junho de 2019 14:31
    sexta-feira, 14 de junho de 2019 12:31
  • Adalmir,

    Veja se este exemplo que utiliza as funções analíticas First_Value() e Last_Value() podem te ajudar:

    Create Table Senhas
    (CodigoSequencialSenha SmallInt Identity(1,1) Primary Key Not Null,
     CodigoCaractereSenha Char(4),
     DataCriacaoSenha DateTime)
    Go
    
    Insert Into Senhas (CodigoCaractereSenha, DataCriacaoSenha)
    Values ('0001','2019-05-30 08:51:00'),
    	        ('0001','2019-05-30 11:11:00'),
                ('0002','2019-06-11 17:22:00'),
                ('0002','2019-06-13 13:21:00'),
                ('0003','2019-06-10 15:59:00'),
                ('0002','2019-06-13 14:00:00')
    Go
    
    -- Realizando o cálculo da diferença --
    Select Distinct CodigoCaractereSenha, 
               DateDiff(Hour,First_Value(DataCriacaoSenha) Over (Partition By CodigoCaractereSenha Order By DataCriacaoSenha),
    		                          Last_Value(DataCriacaoSenha) Over (Partition By CodigoCaractereSenha Order By CodigoCaractereSenha)) As Horas
    From Senhas
    Go

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Sugerido como Resposta IgorFKModerator sexta-feira, 14 de junho de 2019 12:15
    • Marcado como Resposta Adalmir sexta-feira, 14 de junho de 2019 14:31
    sexta-feira, 14 de junho de 2019 11:43

Todas as Respostas

  • Boa tarde,

    Qual versão do SQL Server você está utilizando?

    Como você espera que fique o resultado considerando esse exemplo que você postou?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 13 de junho de 2019 20:26
  • Boa tarde,

    Versão 2014.

    Senha Horas

    Só a senha e quantas horas 

    quinta-feira, 13 de junho de 2019 20:29
  • Adalmir,

    Veja se este exemplo que utiliza as funções analíticas First_Value() e Last_Value() podem te ajudar:

    Create Table Senhas
    (CodigoSequencialSenha SmallInt Identity(1,1) Primary Key Not Null,
     CodigoCaractereSenha Char(4),
     DataCriacaoSenha DateTime)
    Go
    
    Insert Into Senhas (CodigoCaractereSenha, DataCriacaoSenha)
    Values ('0001','2019-05-30 08:51:00'),
    	        ('0001','2019-05-30 11:11:00'),
                ('0002','2019-06-11 17:22:00'),
                ('0002','2019-06-13 13:21:00'),
                ('0003','2019-06-10 15:59:00'),
                ('0002','2019-06-13 14:00:00')
    Go
    
    -- Realizando o cálculo da diferença --
    Select Distinct CodigoCaractereSenha, 
               DateDiff(Hour,First_Value(DataCriacaoSenha) Over (Partition By CodigoCaractereSenha Order By DataCriacaoSenha),
    		                          Last_Value(DataCriacaoSenha) Over (Partition By CodigoCaractereSenha Order By CodigoCaractereSenha)) As Horas
    From Senhas
    Go

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Sugerido como Resposta IgorFKModerator sexta-feira, 14 de junho de 2019 12:15
    • Marcado como Resposta Adalmir sexta-feira, 14 de junho de 2019 14:31
    sexta-feira, 14 de junho de 2019 11:43
  • Bom dia,

    Adalmir, fiquei na dúvida sobre o resultado esperado mas experimente fazer uns testes mais ou menos dessa forma:

    select
        Senhas,
        Data_Redirecionamento,
        lag(Data_Redirecionamento, 1) over(partition by Senhas order by Data_Redirecionamento) as Data_Redirecionamento_Ant,
        datediff
            (hour, 
             lag(Data_Redirecionamento, 1) over(partition by Senhas order by Data_Redirecionamento),
             Data_Redirecionamento) as Diferenca
    from Tabela
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Adalmir sexta-feira, 14 de junho de 2019 14:31
    sexta-feira, 14 de junho de 2019 12:31
  • Obrigado a todos. Resolveu meu problema.
    sexta-feira, 14 de junho de 2019 14:31