none
Como tirar uma média(AVG) de uma coluna com dados DATETIME? RRS feed

  • Pergunta

  • Como tirar a Média dessa coluna:
    07:12:10
    01:14:21
    01:14:21
    07:12:10
    07:12:10
    07:12:10
    07:12:10
    01:14:48
    07:12:10
    01:14:21
    01:14:33
    Média = ?

    Mostrar hh:mm:ss

    Já faz um tempo que quebro a cabeça com isso...

    Aguardo sugestões.

    Valew

    terça-feira, 29 de maio de 2012 12:29

Respostas

  • Bom segundo o SQL que fiz aqui a média de horas deu 4:29:34.

    Segue código SQL abaixo:

    DECLARE @HORAS TABLE
    (
    HORA DATETIME
    )
    
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('01:14:21')
    INSERT INTO @HORAS VALUES('01:14:21')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('01:14:48')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('01:14:21')
    INSERT INTO @HORAS VALUES('01:14:33')
    
    
    SELECT 
    	CASE WHEN Aggr.TOTAL_DE_SEGUNDOS IS NOT NULL THEN
    		CONVERT(VARCHAR, ((Aggr.TOTAL_DE_SEGUNDOS)/3600)) +':' +
    		CONVERT(VARCHAR, (((Aggr.TOTAL_DE_SEGUNDOS)%3600)/60)) +':' +
    		CONVERT(VARCHAR, (((Aggr.TOTAL_DE_SEGUNDOS)%3600)%60)) 
    	ELSE
    		'0:0:0'
    	END TOTAL_DE_HORAS 
    FROM
    (
    	SELECT 
    	DATEDIFF
    	(
    		SECOND,
    		CAST((CONVERT(VARCHAR,CAST(AVG(CAST(HORA AS FLOAT)) AS DATETIME),103)) AS DATETIME),
    		CAST(AVG(CAST(HORA AS FLOAT)) AS DATETIME)
    	) AS TOTAL_DE_SEGUNDOS 
    	FROM 
    		@HORAS
    ) 
    Aggr


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/


    • Editado Vitor Mendes terça-feira, 29 de maio de 2012 13:23
    • Marcado como Resposta Harley Araujo sexta-feira, 1 de junho de 2012 15:52
    terça-feira, 29 de maio de 2012 13:22

Todas as Respostas

  • Pefeto,

    Podemos resolver isto convertendo todas os horarios para segundos ( hora * 3600 | min * 60) somar e dividir pela quantidade de elementos.

    Abraços

    Se útil, Classifique.


    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com Blog: http://dhiegopiroto.wordpress.com/

    terça-feira, 29 de maio de 2012 12:46
  • Bom segundo o SQL que fiz aqui a média de horas deu 4:29:34.

    Segue código SQL abaixo:

    DECLARE @HORAS TABLE
    (
    HORA DATETIME
    )
    
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('01:14:21')
    INSERT INTO @HORAS VALUES('01:14:21')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('01:14:48')
    INSERT INTO @HORAS VALUES('07:12:10')
    INSERT INTO @HORAS VALUES('01:14:21')
    INSERT INTO @HORAS VALUES('01:14:33')
    
    
    SELECT 
    	CASE WHEN Aggr.TOTAL_DE_SEGUNDOS IS NOT NULL THEN
    		CONVERT(VARCHAR, ((Aggr.TOTAL_DE_SEGUNDOS)/3600)) +':' +
    		CONVERT(VARCHAR, (((Aggr.TOTAL_DE_SEGUNDOS)%3600)/60)) +':' +
    		CONVERT(VARCHAR, (((Aggr.TOTAL_DE_SEGUNDOS)%3600)%60)) 
    	ELSE
    		'0:0:0'
    	END TOTAL_DE_HORAS 
    FROM
    (
    	SELECT 
    	DATEDIFF
    	(
    		SECOND,
    		CAST((CONVERT(VARCHAR,CAST(AVG(CAST(HORA AS FLOAT)) AS DATETIME),103)) AS DATETIME),
    		CAST(AVG(CAST(HORA AS FLOAT)) AS DATETIME)
    	) AS TOTAL_DE_SEGUNDOS 
    	FROM 
    		@HORAS
    ) 
    Aggr


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/


    • Editado Vitor Mendes terça-feira, 29 de maio de 2012 13:23
    • Marcado como Resposta Harley Araujo sexta-feira, 1 de junho de 2012 15:52
    terça-feira, 29 de maio de 2012 13:22