none
SQL 2012- SOMATORIO DE CAMPO DATETIME RRS feed

  • Pergunta

  • Boa noite

    O select abaixo retorna os dados em seguida, pergunto, como faço para retornar o somatório do tempo de conexão por data, tipo em 27/04/2014 o tempo total de acesso foi de 00:01:45 (somatório do tempo dos 04 acessos em 27/04/2014)?

    Os campos horainicioconexao, horafimconexao e Tempodeconexao são DateTime                  

     

     

    SELECT  tempodeconexao,

    CAST(Aggr.TotalDeSegundos / 3600 AS VARCHAR) + ':' +

    CAST((Aggr.TotalDeSegundos % 3600) / 60 AS VARCHAR) + ':' +

    CAST((Aggr.TotalDeSegundos % 60) AS VARCHAR) AS totalDeConexaoDoDia

    FROM

    (SELECT tempodeconexao,

    SUM(ISNULL(DATEDIFF(SECOND,horainicioconexao, horafimconexao),0)) TotalDeSegundos

    FROM tempodeconexao

    GROUP BY

    tempodeconexao

    )

    AS

    Aggr

     

    RETORNO DO SELECT

     

    Tempodeconexao                        totalDeConexaoDoDia

     

    2014-04-27 00:00:13.000                     0:0:13

    2014-04-27 00:00:26.000                     0:0:26

    2014-04-27 00:00:32.000                     0:0:32

    2014-04-27 00:00:34.000                     0:0:34

    2014-04-28 00:00:20.000                     0:0:20

    2014-04-28 00:00:21.000                     0:0:21

    2014-04-28 00:00:29.000                     0:0:58

    2014-04-28 00:03:00.000                      0:3:0

    2014-04-29 00:03:32.000                     0:3:32

    quarta-feira, 30 de abril de 2014 00:55

Respostas

  • Dilson

    teste este script

    ;with cte as 
    (
    select cast(tempodeconexao as date) as tempoConexao,sum(DATEDIFF(SECOND,horainicioconexao, horafimconexao)) as TotalDeSegundos from tempodeconexao
    group by cast(tempodeconexao as date)
    )
    select tempoConexao,CAST(TotalDeSegundos / 3600 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 3600) / 60 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 60) AS VARCHAR) AS totalDeConexaoDoDia
     from cte


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 30 de abril de 2014 02:21
    Moderador

Todas as Respostas

  • Dilson

    teste este script

    ;with cte as 
    (
    select cast(tempodeconexao as date) as tempoConexao,sum(DATEDIFF(SECOND,horainicioconexao, horafimconexao)) as TotalDeSegundos from tempodeconexao
    group by cast(tempodeconexao as date)
    )
    select tempoConexao,CAST(TotalDeSegundos / 3600 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 3600) / 60 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 60) AS VARCHAR) AS totalDeConexaoDoDia
     from cte


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 30 de abril de 2014 02:21
    Moderador
  • Olá Marcelo

    O código informado saiu truncado(incompleto) podes postá-lo novamente?

    Obrigado

    Dilson 

    quarta-feira, 30 de abril de 2014 12:37
  • segue

    ;with cte as
    (
    select cast(tempodeconexao as date) as tempoConexao,sum(DATEDIFF(SECOND,horainicioconexao, horafimconexao)) as TotalDeSegundos from tempodeconexao
    group by cast(tempodeconexao as date)
    )

    select tempoConexao,CAST(TotalDeSegundos / 3600 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 3600) / 60 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 60) AS VARCHAR) AS totalDeConexaoDoDia
     from cte


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 30 de abril de 2014 12:52
    Moderador
  • Marcelo

    Não testei o código ainda, mas não teria que ter uma cláusula WHERE para informar de qual data queremos saber?

    e o que signifa o começo ;with cte as  e o final from cte  (estou iniciando no SQL, desculpe)


    Obrigado

    Dilson

    quarta-feira, 30 de abril de 2014 13:23
  • Este é uma comando novo do SQL Server 2008 é a CTE (Common Table Expression)

    http://msdn.microsoft.com/pt-br/library/ms175972.aspx

    Você pode adicionar o where dentro da cte ou momento que vc utiliza....

    execute o codigo que lhe passei acredito vai lhe atender....

    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 30 de abril de 2014 13:52
    Moderador
  • Olá Marcelo, seu select abaixo  me retornou o mesmo resultado que publiquei na abertura desta questão

    ;with cte as
    (
    select cast(tempodeconexao as datetime) as tempoConexao,sum(DATEDIFF(SECOND,horainicioconexao, horafimconexao)) as TotalDeSegundos from tempodeconexao
    group by cast(tempodeconexao as datetime)
    )

    select tempoConexao,CAST(TotalDeSegundos / 3600 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 3600) / 60 AS VARCHAR) + ':' +
    CAST((TotalDeSegundos % 60) AS VARCHAR) AS totalDeConexaoDoDia
     from cte

    Na verdade eu quero que na consulta resulte um único registro com o tempototaldeconexao, ou seja 0:3:32 e também gostaria deste resultado para uma determinada data

    Dilson

    quinta-feira, 1 de maio de 2014 19:28
  • Este é uma comando novo do SQL Server 2008 é a CTE (Common Table Expression)

    http://msdn.microsoft.com/pt-br/library/ms175972.aspx

    Você pode adicionar o where dentro da cte ou momento que vc utiliza....

    execute o codigo que lhe passei acredito vai lhe atender....

    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    Pessoal, 

    Só um detalhe o CTE foi introduzido a partir do SQL Server 2005 e não 2008.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 7 de maio de 2014 19:44