Inquiridor
Calcular média de campo datetime?

Pergunta
-
Bom dia, preciso calcular a média de um campo datetime, o avg ñ funciona. Ex.: tenho um intervalo de datas entre 01/01/2009 até 25/01/2009. Como faço?
Att.,
- Movido Gustavo Maia Aguiar terça-feira, 28 de julho de 2009 09:48 (De:SQL Server - Desenvolvimento Geral)
- Tipo Alterado Gustavo Maia Aguiar quinta-feira, 27 de maio de 2010 11:49 É uma pergunta e não uma alteração
Todas as Respostas
-
Luciobinho,
Fiz um teste e acho que este script pode resolver seu problema, uma vez que não se pode usar o avg com datas.
declare @data1 datetime , @data2 datetime set @data1 ='20090101' set @data2 ='20090125' select dateadd(day,(datediff(dd,@data1,@data2)/2),@data1)
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!! -
Marcelo,
Eu já precisei realizar esta cálculo de média para campos datatime e utilizei uma solução muito parecida com a sua.
Luciobinho,
Este cálculo de média deverá retornar qual informação?
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA -
Bom Dia,
Acho que você poderia utilizar algo um pouco mais apurado, pois, nem sempre você terá somente duas datas para trabalhar:DECLARE @T TABLE (DATA SMALLDATETIME) INSERT INTO @T VALUES ('20090101') INSERT INTO @T VALUES ('20090102') INSERT INTO @T VALUES ('20090103') INSERT INTO @T VALUES ('20090104') INSERT INTO @T VALUES ('20090108') INSERT INTO @T VALUES ('20090111') INSERT INTO @T VALUES ('20090112') INSERT INTO @T VALUES ('20090115') INSERT INTO @T VALUES ('20090117') INSERT INTO @T VALUES ('20090125')
-- Saber o "dia médio" SELECT DATEADD(D,AVG(DATEDIFF(D,'20090101',DATA)),'20090101') FROM @T
Há muitos detalhes úteis em:
Como realizar cálculos com horas no SQL Server – Parte I
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!516.entryComo realizar cálculos com horas no SQL Server – Parte II
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!532.entryComo realizar cálculos com horas no SQL Server – Parte III
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!534.entryComo realizar cálculos com horas no SQL Server – Parte IV
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!536.entry
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comMitos do SQL Server – Será que COUNT(1) ou COUNT('X') são mais performáticos que COUNT(*) ?
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!658.entry
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Fausto.Branco quinta-feira, 27 de maio de 2010 12:06
-
Maia,
Muito legal, este script.
No meu caso quando precisei de algo parecido, eu primeiramente contei a quantidade de dias e com este resultado realizei a divisão.
Não utilizei a função AVG.
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA -
-
fsouzarj,
Sua sugestão é interessante, mas realizar conversão de dados de forma implicita obriga o SQL Server a realizar uma série de procedimento inclusive no seu plano de execução para processar esta query.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
Fsouzarj, não há necessidade de tudo isso. Dê uma olhada no que o Maia te passou, é de longe a melhor opção. Você não precisa fazer Casts e Converts que deixam o código dificil de entender e acaba prejudicando a execução
Sempre que você faz um DateDiff de uma data a partir da data "0" - DateDiff(d, 0, Getdate()) ou '20090101' no exemplo do Maia - ele retorna a quantidade (int se não me engano) em dias da sua data. Com essa quantidade é só fazer o AVG e em seguida o DateAdd adiciona essa media de dias à data 0, então você tem sua data média.
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco -
-
Leia o artigo Como Calcular em Número de Dias a Diferença Entre Duas Datas com o C# (CSharp)
http://cavas.com.br/index.php/programacao/como-calcular-em-numero-de-dias-a-diferenca-entre-duas-datas-com-o-c-csharp
Abraços,
Marcelo Pereira Cavalini