Calcular média movel dos ultimos 30 dias

23/12/2015

0

Galera, é o seguinte, tenho um problema e não consigo resolver, preciso calcular a média móvel e colocar em um gráfico através de uma query SQL, como
sabemos, a média movel é calculada atráves da soma dos valores naqueles dias e dividido pela quantidade de dias até aquela data, então vem a dúvida, como ficaria uma query assim, consigo fazer isso com uma query "seca" ou vou precisar de uma function, já que os calculos vão ser dinamicos, pois o calculo do dia 25 vai ser VALOR / 25 e o calculo do dia 03 vai ser VALOR / 03??


Obrigado a quem responder.
Patrick

Patrick

Responder

Posts

23/12/2015

Isaac Jose

boa tarde possuo um processo desse tipo.
Criei uma tabela contendo os feriados do ano e uma função que verifica os dias uteis essa função pega os dias e depois vc da um update em um campo de dias uteis e dai faz seu calculo. abaixo segue exemplos.
obs. não costumo postar códigos espero que esteja certo.

d
create  function [manutencao].[Fn_Dias_Uteis] (@datainicio date ,@datafim date)
returns int 
as 
begin 
declare @count int
select @count  = 0 
while @datainicio <= @datafim
begin 
if datePart(weekday,@datainicio)not in (7,1) and @datainicio not in (select data_feriado from producao.tb_feriado)
select  @count = @count +1
select @datainicio  = dateadd(day,1,@datainicio)
end
return @count
end GO



----
update tabela_com_Dia
set  qtddiautil = (

select manutencao.fn_Dias_Uteis((select  DataInicio = CAST(MAX(BintAno)AS VARCHAR(4))+'-'+
					 CAST(MAX(tintmes)AS VARCHAR(2))+'-'+
					 '01'
        from producao.Tb_AcumProd_PFPJ_Dia)
        ,(SELECT
        
        DataFim    = CAST(MAX(BintAno)AS VARCHAR(4))+'-'+
					 CAST(MAX(tintmes)AS VARCHAR(2))+'-'+
					 CAST(MAX(tintdia)AS VARCHAR(2))
from tabela_com_Dia a
where  a.tintMes =(select (max(tintmes)) from tabela_com_Dia )

       )))
Responder

23/12/2015

Patrick

boa tarde possuo um processo desse tipo.
Criei uma tabela contendo os feriados do ano e uma função que verifica os dias uteis essa função pega os dias e depois vc da um update em um campo de dias uteis e dai faz seu calculo. abaixo segue exemplos.
obs. não costumo postar códigos espero que esteja certo.

d
create  function [manutencao].[Fn_Dias_Uteis] (@datainicio date ,@datafim date)
returns int 
as 
begin 
declare @count int
select @count  = 0 
while @datainicio <= @datafim
begin 
if datePart(weekday,@datainicio)not in (7,1) and @datainicio not in (select data_feriado from producao.tb_feriado)
select  @count = @count +1
select @datainicio  = dateadd(day,1,@datainicio)
end
return @count
end GO



----
update tabela_com_Dia
set  qtddiautil = (

select manutencao.fn_Dias_Uteis((select  DataInicio = CAST(MAX(BintAno)AS VARCHAR(4))+'-'+
					 CAST(MAX(tintmes)AS VARCHAR(2))+'-'+
					 '01'
        from producao.Tb_AcumProd_PFPJ_Dia)
        ,(SELECT
        
        DataFim    = CAST(MAX(BintAno)AS VARCHAR(4))+'-'+
					 CAST(MAX(tintmes)AS VARCHAR(2))+'-'+
					 CAST(MAX(tintdia)AS VARCHAR(2))
from tabela_com_Dia a
where  a.tintMes =(select (max(tintmes)) from tabela_com_Dia )

       )))



Olá Isaac, obrigado pela resposta, PORÉM ainda não é o que eu quero, eu quero saber o ultimo mês, os ultimos dois mesês. pois eu já tenho as datas, ou seja, as datas vão ser agrupadas e depois fazer a média movel...
Responder

23/12/2015

Isaac Jose

Amigo isso é adaptável é só criar uma tmp agrupando os valores e depois trabalhar com os meses que tem a informação. Mais a pergunta q vc fez não tem esse conteúdo da ultima resposta.PORÉM é só trabalhar com as funções de getdate, Max etc que chegara ao resultado se não conseguir mande uma estrutura com alguns inserts q tento fazer algo
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar