Friday 4 August 2017

Db2 Média Móvel


Esta é uma questão Evergreen Joe Celko. Ignoro qual plataforma DBMS é usada. Mas, em qualquer caso, Joe conseguiu responder há mais de 10 anos com o SQL padrão. Citação de Joe Celko SQL Puzzles and Answers: Essa última tentativa de atualização sugere que poderíamos usar o predicado para construir uma consulta que nos daria uma média móvel: a coluna extra ou a abordagem de consulta melhor. A consulta é tecnicamente melhor porque a abordagem UPDATE Desmoralize o banco de dados. No entanto, se os dados históricos que estão sendo registrados não mudem e o cálculo da média móvel é caro, você pode considerar usar a abordagem da coluna. Consulta SQL Puzzle: por todos os meios uniforme. Você apenas joga no balde de peso apropriado dependendo da distância do ponto de tempo atual. Por exemplo, quottake weight1 para datapoints dentro de 24 horas a partir do ponto de dados atual0.5 para pontos de dados dentro de 48hrsquot. Esse caso é importante quantos pontos de dados consecutivos (como 6:12 e 11:48) estão distantes um do outro. Um caso de uso que eu posso pensar seria uma tentativa de alisar o histograma sempre que os pontos de dados não forem suficientemente densos. 22:22 Não estou certo de que seu resultado esperado (saída) mostre uma média simples em movimento simples (rolando) por 3 dias. Como, por exemplo, o primeiro triplo dos números, por definição, dá: mas você espera 4.360 e é confuso. No entanto, sugiro a seguinte solução, que usa o AVG de função de janela. Essa abordagem é muito mais eficiente (clara e menos intensiva em recursos) do que a SELF-JOIN introduzida em outras respostas (e estou surpreso que ninguém tenha dado uma solução melhor). Você vê que o AVG está envolvido com o caso quando rownum gt p. days, em seguida, para forçar NULL s nas primeiras filas, onde 3 Day Moving Average não tem sentido. Respondido 23 de fevereiro 16 às 13:12 Podemos aplicar o método de junção externa suja esquerda de Joe Celkos (como citado acima por Diego Scaravaggi) para responder a pergunta como foi feita. Gera a saída solicitada: respondeu Jan 9 16 às 0:33 Sua resposta 2017 Stack Exchange, IncWeighted média móvel em T-SQL Em uma publicação anterior, demonstrei o cálculo de médias móveis em T-SQL. No entanto, há uma grande desvantagem com médias móveis simples. As mudanças de preço no início do período têm a mesma importância que as mudanças de preços mais recentes. De alguma forma, you8217d gosta de atribuir pesos diferentes às mudanças de preços, de modo que as mudanças mais recentes tenham mais peso. Para isso, pode-se calcular uma média móvel ponderada (WMA). Nesta postagem do blog, vou mostrar dois métodos diferentes para calcular o WMA, que pode ser usado no SQL Server 2005 e posterior e a outra versão é para versões do SQL Server anteriores a 2005. Para calcular o peso relativo de cada mudança de preço, nós Precisa conhecer a posição de cada variação de preço em relação ao dia calculado. Por causa disto, uma função de janela não pode ser usada. Não é possível obter informações das linhas individuais na janela. No exemplo abaixo, calcularemos a média móvel ponderada por 9 dias (WMA9). O exemplo usa o TAdb. Um script para criar TAdb pode ser encontrado aqui. Independentemente da versão do SQL Server, para cada linha, precisamos acessar as 8 linhas anteriores, 9 com a linha atual incluída. Essas 9 linhas serão a janela que contém nossas mudanças nos preços. Cada linha dessa janela receberá um peso linear que está aumentando com a mesma quantidade para cada linha até a linha atual. O peso para cada linha será calculado usando a posição da linha da janela em relação à linha atual. Let8217s dizem que queremos calcular WMA para a 9ª linha (citações de TAdb StockId 1): 1 30,02 30,02 2 30,33 60,66 3 30,33 90,99 4 30,44 121,76 5 30,24 151,20 6 30,27 181,62 7 29,87 209,09 8 30,00 240,00 9 30,02 270,18 A soma do exposto acima é 1355,52. Isso é dividido pela soma dos pesos, que é 123456789 45. O WMA9 para a linha 9 é 1355,52 45 30,12. Se você deseja calcular o WMA além de 9 dias, use o seguinte T-SQL (obtenha a função GetNums2 aqui) para obter o divisor pelo período de tempo (por exemplo, 45 para 9 dias WMA): divisores de média móvel média (WMA) ponderada Média móvel ponderada SQL Server 2005 e posterior Esta versão usa um CTE para calcular o WMA: Resultado por 9 dias Média móvel ponderada (WMA9) Nos resultados acima, você pode ver o WMA9 para a linha 9 é 30,12, conforme calculado anteriormente. Média móvel ponderada antes do SQL Server 2005 A única diferença entre a versão do SQL Server 2005 e esta é o uso de uma expressão de tabela comum. A versão pré 2005 usa tabelas reais em vez de CTE8217s: Desempenho Ao calcular uma média móvel simples e usando o SQL Server 2012 ou posterior, uma grande melhoria no desempenho pode ser vista ao usar funções de janela em comparação com os metohods alternativos usados ​​em versões antigas do SQL Server . Os cálculos das médias móveis ponderadas no entanto, can8217t usam funções de janelas da mesma maneira. Uma comparação entre a versão do SQL Server 2005 do WMA mostra uma pequena melhoria em relação às versões usadas em versões antigas do SQL Server: T-SQL WMA SQL Server 2005 em comparação com a versão anterior a 2005. Por causa dos cálculos onerosos envolvidos na WMA, pode ser uma boa idéia persistir os resultados. WMA são usados ​​da mesma forma que a SMA, na análise de tendências. A WMA tem mais peso nas recentes mudanças de preços no entanto. Esta publicação no blog faz parte de uma série sobre análise técnica, TA, no SQL Server. Veja as outras publicações aqui. Postado por Tomas Lind Tomas Lind - serviços de consultoria como SQL Server DBA e desenvolvedor de banco de dados no High Coast Database Solutions AB.

No comments:

Post a Comment