Calcular média movel dos ultimos 30 dias
23/12/2015
0
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
Posts
23/12/2015
Isaac Jose
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 ) )))
23/12/2015
Patrick
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...
23/12/2015
Isaac Jose
Clique aqui para fazer login e interagir na Comunidade :)