Calcular média movel dos ultimos 30 dias
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.
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
Curtidas 0
Respostas
Isaac Jose
23/12/2015
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
----
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 ) )))
GOSTEI 0
Patrick
23/12/2015
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
----
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...
GOSTEI 0
Isaac Jose
23/12/2015
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
GOSTEI 0