Usuário com melhor resposta
SQL 2012- SOMATORIO DE CAMPO DATETIME

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
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- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 7 de maio de 2014 19:43
- Marcado como Resposta Durval RamosModerator sábado, 13 de setembro de 2014 01:45
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- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 7 de maio de 2014 19:43
- Marcado como Resposta Durval RamosModerator sábado, 13 de setembro de 2014 01:45
-
-
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 cteAtt.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
-
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 -
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 cteNa 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
-
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: @marcelodbaPessoal,
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]