Friday, 6 October 2017

T-Sql Moving Average Function


SQL Server T-SQL Código para calcular uma média móvel Por: Dallas Snider Leia comentários Dicas relacionadas: Mais Funções - User Defined UDF Como posso suavizar os dados em uma coluna com uma média móvel em T-SQL Você pode por favor andar através de um exemplo No SQL Server com código T-SQL Como podemos validar os resultados Os dados de séries temporais podem ser inerentemente ruidosos e uma boa maneira de suavizar os dados é calcular uma média móvel. Há uma série de maneiras de calcular uma média móvel em T-SQL, mas nesta ponta vamos olhar para uma maneira de calcular uma média móvel que define a janela de média x número de linhas atrás e x número de linhas à frente da corrente Linha de dados. A vantagem disso é que não há atraso no valor médio retornado eo valor da média móvel está na mesma linha com seu valor atual. Vamos começar criando uma tabela e carregando alguns dados usando o T-SQL abaixo. Temos 361 pontos de dados que criam uma onda senoidal barulhenta. Depois de carregar os dados, vamos executar o seguinte código T-SQL para selecionar todas as colunas, juntamente com o valor da média móvel. No código abaixo, o tamanho da janela média móvel é 15 (7 linhas que precedem a linha atual, mais a linha atual, mais as 7 linhas seguintes). A média móvel da coluna DataValue é retornada como a coluna MovingAverageWindowSize15. A cláusula ORDER BY é extremamente importante para manter os dados na ordem classificada adequada. Podemos copiar e colar os resultados no Excel para validar o cálculo está correto. Na imagem abaixo, a janela começa na célula C3 e termina em C17. A média móvel calculada pelo T-SQL nesta dica aparece na célula D10. A média calculada pelo Excel está na parte inferior e é igual ao valor em D10. Na figura abaixo, podemos ver os valores de dados originais plotados em azul com a média móvel plotada em vermelho. Próximas etapas Ajuste o tamanho da janela da média móvel para ver como a plotagem muda. Além disso, certifique-se de verificar essas outras dicas sobre T-SQL de mssqltips: Última atualização: 3/8 / 2016Im tentando calcular uma média móvel de 3 meses agrupados por região e mês, como em Note que mês é expandido para fins ilustrativos, Eu realmente espero que a saída diga apenas um único mês. Agora eu posso fazer isso criando um agrupamento CTE por região e mês, em seguida, juntando-se a ele um par de vezes, mas isso é feio, imagine se você tivesse que fazer uma média móvel de 6 meses ou média móvel de 12 meses estou tentando usar o t - Sql 2012 funções analíticas, especificamente a opção RANGE. Ive usado ROWS precedendo antes, mas nunca intervalo. O que eu tentei foi Mas eu recebo um erro de sintaxe: Msg 8120, Nível 16, Estado 1, Coluna de linha 2 dbo. vwscorebyregion. month é inválido na lista de seleção porque ele não está contido em uma função agregada ou a cláusula GROUP BY. Claramente estou fazendo algo bobo, mas não tenho certeza que. Pediu Mar 23 13 às 7:54 marcs 462k 9679 94 9679 887 9679 1057 você precisa de quotmovequot esse grupo por na função de janela: avg (var) sobre (partição por região oder por.) Ndash ahorsewithnoname Mar 23 13 em 8:41 Em primeiro lugar, RANGE só é suportado com delimitadores de moldura ROUND e UNBOUNDED, não pode ser utilizado com N PRECEDING ou N FOLLOWING. De seu título, parece que você quer obter 3 meses de rolamento AVG (deslizamento avg), então você melhor usar ROWS Usando ROWS (Isso é mais provável o que você precisa) SQl Fiddle Demo Nota: Usando RANGE: Nota: Usando RANGE você tem Para controlar a largura da partição, uma vez que você deseja agg por 3 meses, e intervalo doesnt suporte N PRECEDING e N SEGUINTE. Ele só suporta seguinte: respondeu Mar 23 13 em 9: 39Eu estou trabalhando com SQL Server 2008 R2, tentando calcular uma média móvel. Para cada registro na minha opinião, eu gostaria de coletar os valores dos 250 registros anteriores e, em seguida, calcular a média para esta 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. Portanto, para TransactionID 300, coletar todos os valores de 250 linhas anteriores (exibição é ordenada decrescente por TransactionID) e, em seguida, na coluna MovAvg escrever o resultado da média desses valores. Eu estou olhando para coletar dados dentro de um intervalo de registros. Pediu Oct 28 14 em 20:58

No comments:

Post a Comment