Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardobasile

Problema ao tirar média por mês

Recommended Posts

Prezados, boa tarde!

 

Estou com um problema para resolver aqui no meu estágio.

 

Estou com uma base de dados onde é responsável pelo gerenciamento de mudanças, incidentes, problemas, configurações etc do ambiente de infra.

 

Necessito fazer um relatório que retorne: A média do total de mudanças abertas por dia no mês.

 

O problema é que: nem todos os dias ocorrem mudanças, então o meu select está retornando apenas a média calculando somente os dias que houveram a mudança, por exemplo:

 

Em dezembro, apenas 24 dias tiveram mudanças, então o meu select está somando tudo e dividindo por 24 e não por 31, entenderam?

 

Tentei varias formas e não consegui, então decidi apelar para o oráculo rs!

 

Tenho a seguinte seleção:

USE MDB
GO
SELECT Ano, Mes, NomeMes, AVG(Quantidade) AS 'Qtd. Média' FROM
	(SELECT	DATEPART(YEAR, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) AS Ano,
		DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) AS Mes,
		NomeMes = CASE	-- Para identificar os meses por extenso
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 1 THEN 'Janeiro'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 2 THEN 'Fevereiro'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 3 THEN 'Março'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 4 THEN 'Abril'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 5 THEN 'Maio'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 6 THEN 'Junho'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 7 THEN 'Julho'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 8 THEN 'Agosto'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 9 THEN 'Setembro'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 10 THEN 'Outubro'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 11 THEN 'Novembro'
			  WHEN DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) = 12 THEN 'Dezembro'
		          ELSE 'ERROR'
			  END,
		DATEPART(DAY, DATEADD(second, C.open_date,'1969-12-31 21:00:00')) AS Dia, 
		COUNT(C.id) AS Quantidade 
              FROM CHG C 
	      GROUP BY DATEPART(YEAR, DATEADD(second, C.open_date,'1969-12-31 21:00:00')),
		    DATEPART(MONTH, DATEADD(second, C.open_date,'1969-12-31 21:00:00')),
		    DATEPART(DAY, DATEADD(second, C.open_date,'1969-12-31 21:00:00'))) AS TabelaTemp
     GROUP BY Ano, Mes, NomeMes
	ORDER BY 1, 2, 3

Observação: Estou utilizando o DATEPART pois os campos de data são do tipo INT e retornam dados como: "1420469421"

 

Agradeço desde já qualquer auxílio.

 

Ricardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.