Friday, 7 July 2017

Sql Server Moving Average Query


Estou trabalhando com o SQL Server 2008 R2, tentando calcular uma média móvel. Para cada registro na minha opinião, gostaria de coletar os valores dos 250 registros anteriores e, em seguida, calcular a média para essa seleção. As colunas de exibição são as seguintes: TransactionID é exclusivo. Para cada TransactionID. Eu gostaria de calcular a média para o valor da coluna, sobre os anteriores 250 registros. Assim para TransactionID 300, coletar todos os valores de 250 linhas anteriores (exibição é classificada decrescente por TransactionID) e, em seguida, na coluna MovAvg gravar o resultado da média desses valores. Eu estou olhando para coletar dados dentro de um intervalo de registros. Perguntou Oct 28 14 em 20: 58Moving média em T-SQL Um cálculo comum na análise de tendência é a média móvel (ou rolling). Uma média móvel é a média das, por exemplo, as últimas 10 linhas. A média móvel mostra uma curva mais suave do que os valores reais, mais ainda com um período mais longo para a média móvel, tornando-se uma boa ferramenta para análise de tendências. Esta postagem do blog irá mostrar como calcular a média móvel em T-SQL. Métodos diferentes serão usados ​​dependendo da versão do SQL Server. O gráfico abaixo demonstra o efeito de alisamento (linha vermelha) com uma média móvel de 200 dias. As cotações de ações são a linha azul. A tendência a longo prazo é claramente visível. T-SQL Moving Avergage 200 dias A demonstração abaixo requer o banco de dados TAdb que pode ser criado com o script localizado aqui. No próximo exemplo vamos calcular uma média móvel para os últimos 20 dias. Dependendo da versão do SQL Server, haverá um método diferente para fazer o cálculo. E, como veremos mais adiante, as versões mais recentes do SQL Server possuem funções que permitem um cálculo muito mais efetivo. SQL Server 2012 e posterior Moving Average Esta versão faz uso de uma função de janela agregada. O que há de novo no SQL 2012 é a possibilidade de restringir o tamanho da janela, especificando quantas linhas que precedem a janela devem conter: Linhas precedentes é 19, porque incluiremos a linha atual também no cálculo. Como você pode ver, o cálculo da média móvel no SQL Server 2012 é bastante simples. A figura abaixo demonstra o princípio de janela. A linha atual é marcada com amarelo. A janela é marcada com um fundo azul. A média móvel é simplesmente a média de QuoteClose nas linhas azuis: Janela de média móvel T-SQL. Os resultados dos cálculos em versões mais antigas do SQL Server são os mesmos, para que eles não serão mostrados novamente. SQL Server 2005 8211 2008R2 Moving Average Esta versão faz uso de uma expressão de tabela comum. O CTE é auto referenciado para obter as últimas 20 linhas para cada linha: Movendo Média antes do SQL Server 2005 A versão anterior a 2005 usará uma junção externa esquerda na mesma tabela para obter as últimas 20 linhas. Comparação de desempenho Se executamos os três métodos diferentes simultaneamente e verificamos o plano de execução resultante, há uma diferença dramática no desempenho entre os métodos: Comparação de três Diferentes métodos para calcular a média móvel Como você pode ver, as melhorias na janela de função no SQL 2012 faz uma enorme diferença no desempenho. Como mencionado no início deste post, as médias móveis são usadas como uma ferramenta para ilustrar tendências. Uma abordagem comum é combinar médias móveis de diferentes comprimentos, a fim de detectar alterações nas tendências a curto, médio e longo prazo, respectivamente. De particular interesse são a passagem de linhas de tendência. Por exemplo, quando a tendência curta se move sobre a tendência de longo ou médio, isso pode ser interpretado como um sinal de compra em análise técnica. E quando a tendência curta se move sob uma linha de tendência mais longa, isso pode ser interpretado como um sinal de venda. O gráfico abaixo mostra Cotações, Ma20, Ma50 e Ma200. T-SQL Ma20, Ma50, Ma200 comprar e vender sinais. Este blog é parte de uma série sobre análise técnica, TA, no SQL Server. Veja os outros posts aqui. Publicado por Tomas Lind Esta é uma pergunta Evergreen Joe Celko. Eu ignoro qual plataforma DBMS é usada. Mas, em qualquer caso, Joe foi capaz de responder há mais de 10 anos com o SQL padrão. A tentativa de última 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 Desnormalizar o banco de dados. No entanto, se os dados históricos que estão sendo gravados não vai mudar ea computação da média móvel é cara, você pode considerar usar a abordagem de coluna. SQL consulta Quebra-cabeça: por todos os meios uniforme. Você joga apenas para o balde de peso apropriado, dependendo da distância do ponto de tempo atual. Por exemplo quottake weight1 para datapoints dentro de 24hrs de datapoint atual weight0.5 para datapoints dentro de 48hrsquot. Esse caso importa quanto pontos de dados consecutivos (como 6:12 am e 11:48 pm) estão distantes uns dos outros Um caso de uso que eu posso pensar seria uma tentativa de suavizar o histograma onde quer que os pontos de dados não são densos o suficiente ndash msciwoj May 27 15 at 22:22 Eu não tenho certeza que seu resultado esperado (saída) mostra clássico simples movendo (rolando) média de 3 dias. Porque, por exemplo, o primeiro triplo de números por definição dá: mas você espera 4.360 e sua confusão. No entanto, sugiro a seguinte solução, que usa a função de janela AVG. Essa abordagem é muito mais eficiente (clara e menos intensiva em recursos) do que o SELF-JOIN introduzido 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 linhas, onde 3 dias Moving Average é sem sentido. Respondeu Feb 23 16 at 13:12 Podemos aplicar Joe Celkos suja deixada externa juntar método (como citado acima por Diego Scaravaggi) para responder à pergunta como foi perguntado. Gera a saída solicitada: respondeu Jan 9 16 at 0:33 Sua resposta 2017 Stack Exchange, Inc

No comments:

Post a Comment