none
Calcular tempo de execução entre duas linhas RRS feed

  • Pergunta

  • Pessoal, boa noite,

    Estou tentando resolver um problema e gostaria que alguém me ajudasse.

    Tenho a seguinte tabela:

    Codigo Nome Data Inicio Data Fim
    1 Teste_01 21-03-2012 12:50:01.000 21-03-2012 12:50:01.000
    2 Teste_01 21-03-2012 12:50:11.000 21-03-2012 12:50:11.000
    3 Teste_02 21-03-2012 13:00:12.000 21-03-2012 13:00:12.000
    4 Teste_02 21-03-2012 13:00:28.000 21-03-2012 13:00:28.000

    Tenho a data de inicio da execução em uma linha e o final da execução do Teste_01 em outra, o mesmo acontece com o Teste_02.

    Tenho que fazer um query que  calcule o tempo entre o inicio e o fim da execução, mas não estou conseguindo porque estão em linhas diferentes.

    Alguém sabe como resolvo este problema?

    Obrigado a todos,

    SeuBell

    quarta-feira, 4 de abril de 2012 03:30

Respostas

  • Para fazer da forma com que vocë quer, uma das datas terá que ser a sua data base. Eu escolhi fazer pela DataInicio. Veja se o código abaixo te atende:

    SELECT Nome, CONVERT(DATE, DataInicio) DATA, MIN(DataInicio), MAX(DataFim), (MAX(DataFim) - MIN(DataInicio)) AS Diferenca, DATEDIFF(ss, MIN(DataInicio), MAX(DataFim)) AS DIFF
    FROM teste 
    GROUP BY nome, CONVERT(DATE, DataInicio)
    


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta SeuBell quarta-feira, 4 de abril de 2012 16:02
    quarta-feira, 4 de abril de 2012 13:58
    Moderador

Todas as Respostas

  • SeuBell,

         Segue um exemplo utilizando a função DATEDIFF (que eu gosto mais, mas o resultado será sempre em segundos, neste caso) e um exemplo simplesmente subtraindo a data final da data inicial.

    SELECT Nome, MIN(DataInicio), MAX(DataFim), (MAX(DataFim) - MIN(DataInicio)) AS Diferenca, DATEDIFF(ss, MIN(DataInicio), MAX(DataFim)) AS DIFF
    FROM Tabela
    GROUP BY nome 
    

    Espero ter ajudado.

    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    quarta-feira, 4 de abril de 2012 05:42
    Moderador
  • Roberto, bom dia e obrigado.

    Fiz o teste com a query que você fez como exemplo, mas não deu certo, ela está pegando, por exemplo: o Teste_01 e calcula o tempo de execução entre a menor data e a maior data, o problema é que o Teste_01 tem na minha tabela varias vezes em datas diferentes. Preciso calcular por dia, por exemplo, no dia 21-03 o Teste_01 rodou em 10 segundos.

    Será que você pode me ajudar?

    Obrigado

    quarta-feira, 4 de abril de 2012 13:40
  • Para fazer da forma com que vocë quer, uma das datas terá que ser a sua data base. Eu escolhi fazer pela DataInicio. Veja se o código abaixo te atende:

    SELECT Nome, CONVERT(DATE, DataInicio) DATA, MIN(DataInicio), MAX(DataFim), (MAX(DataFim) - MIN(DataInicio)) AS Diferenca, DATEDIFF(ss, MIN(DataInicio), MAX(DataFim)) AS DIFF
    FROM teste 
    GROUP BY nome, CONVERT(DATE, DataInicio)
    


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta SeuBell quarta-feira, 4 de abril de 2012 16:02
    quarta-feira, 4 de abril de 2012 13:58
    Moderador
  • Roberto

    Era exatamente isto que queria.

    Obrigado

    quarta-feira, 4 de abril de 2012 16:03