Mover Média Em Sql Servidor


Anteriormente, discutimos como escrever médias móveis em Postgres. Pela demanda popular, mostrava-se como fazer o mesmo no MySQL e no SQL Server. Bem, cubra como anotar gráficos ruidosos como este: Com uma linha média anterior de 7 dias como esta: A grande ideia Nosso primeiro gráfico acima é bastante ruidoso e difícil de obter informações úteis. Podemos suavizá-lo, traçando uma média de 7 dias em cima dos dados subjacentes. Isso pode ser feito com funções de janela, auto-junções ou subconsultas correlatas - bem, cubra os dois primeiros. Bem, comece com uma média anterior, o que significa que o ponto médio no dia 7 do mês é a média dos primeiros sete dias. Visualmente, isso muda os picos no gráfico à direita, como uma grande espiga é calculada a média nos sete dias seguintes. Primeiro, crie uma tabela de contagem intermediária Queremos calcular uma média sobre as inscrições totais para cada dia. Supondo que tenhamos uma tabela típica de usuários com uma linha por usuário novo e um timestamp createdat, podemos criar nossa tabela agregada de inscrições como assim: No Postgres e no SQL Server você pode usar isso como um CTE. No MySQL você pode salvá-lo como uma tabela temporária. O Postgres Rolling Average, felizmente Postgre tem funções de janela que são a maneira mais simples de calcular uma média em execução. Essa consulta pressupõe que as datas não possuem lacunas. A consulta está em média nas últimas sete linhas, não nas sete últimas datas. Se seus dados tiverem lacunas, preencha-os com generateseries ou junte-se a uma tabela com linhas de data densa. MySQL Rolling Average O MySQL não possui funções de janela, mas podemos fazer uma computação similar usando auto-junções. Para cada linha da nossa tabela de contagem, nos juntamos a cada linha que foi nos últimos sete dias e leva a média. Esta consulta lida automaticamente com intervalos de data, pois estamos olhando linhas em um intervalo de datas em vez das N linhas anteriores. O SQL Server Rolling Average SQL Server possui funções de janela, portanto, calcular a média móvel pode ser feita no estilo Postgres ou no estilo MySQL. Por simplicidade, estavam usando a versão MySQL com uma auto-união. Isso é conceitualmente o mesmo que no MySQL. As únicas traduções são a função dateadd e explicitamente denominada grupo por colunas. Outras médias Nos concentramos na média de fim de semana de 7 dias nesta publicação. Se quisermos olhar para a média líder de 7 dias, é tão simples quanto classificar as datas na outra direção. Se quisermos ver uma média centrada, use: Postgres: linhas entre 3 anteriores e 3 seguintes MySql: entre signups. date - 3 e signups. date 3 no MySQL SQL Server: entre dateadd (dia, -3, inscrições). Data) e dateadd (dia, 3, signups. date) A média móvel exponencial em T-SQL As médias móveis exponentes são semelhantes às médias móveis ponderadas, na medida em que atribuem menos peso às mudanças há muito tempo e mais peso às mudanças recentes. As médias móveis ponderadas são lineares, mas as médias móveis exponenciais são exponenciais. Ou seja, o peso pode ser expresso como uma curva: existe uma ótima maneira de calcular as médias móveis exponenciais no T-SQL usando um recurso indocumentado sobre variáveis ​​e execução de totais no SQL Server. Nesta publicação do blog, vou mostrar como usar esse método para calcular a média móvel exponencial em T-SQL, mas também apresentarei um método que está usando recursos padrão no SQL Server. Infelizmente, isso significa usar um loop. Nos exemplos, calculo uma média móvel exponencial de 9 dias. Os exemplos usam o banco de dados TAdb. Um script para criar TAdb pode ser encontrado aqui. Média de Movimento Exponencial (EMA): Método de Execução de Totais A teoria por trás dos recursos totais em execução em atualizações é descrita em detalhes por Jeff Moden em seu artigo, Resolvendo os Problemas de Roteamento Total e Ordenado Ordem. Outros recursos que descrevem o uso desse método para calcular EMA são as postagens do blog Calculando as médias móveis com o T-SQL por Gabriel Priester e o desafio do fórum Expponential Moving Average Challenge. Ambos no SQL Server Central. Basicamente, no T-SQL você pode atualizar variáveis, bem como colunas em uma declaração de atualização. As atualizações são feitas linha a linha internamente pelo SQL Server. Este comportamento de linha por linha é o que torna o cálculo de um total executável possível. Este exemplo mostra como funciona: Observe que 8220ColumnRunningTotal8221 é um total em execução de 8220ColumnToSum8221. Usando esse método, podemos calcular EMA9 com este T-SQL: o cálculo do EMA é bastante simples. Usamos a linha atual e a anterior, mas com mais peso para a linha atual. O peso é calculado pela fórmula 2 (19), onde 822098221 é o parâmetro para o comprimento da EMA. Para calcular EMA9 para a linha 10 acima, o cálculo é: neste caso, a linha atual obtém 20 do peso (2 (19) 0,2) e a linha anterior recebe 80 do peso (1-2 (19) 0,8). Você encontra este cálculo na declaração acima na instrução CASE: Média de Movimento Exponencial (EMA): Método de Looping Tanto quanto eu sei, exceto o método de totais em execução descrito acima, não há nenhuma maneira de calcular EMA usando uma instrução SQL baseada em conjunto . Portanto, o T-SQL abaixo está usando um loop while para calcular EMA9: os resultados são os mesmos que no exemplo de totais em execução acima. Desempenho Como esperado, a versão de totais em execução baseada em conjunto é muito mais rápida do que a versão do loop. Na minha máquina, a solução baseada em conjunto era de cerca de 300 ms, em comparação com cerca de 1200 com a versão do loop. A versão de loop está mais em conformidade com os padrões SQL, no entanto. Portanto, a escolha entre os métodos depende do que seja o mais importante para você, desempenho ou padrões. A média móvel exponencial pode ser utilizada na análise de tendências, como acontece com os outros tipos de médias móveis, média móvel simples (SMA) e média móvel ponderada (WMA). Há também outros cálculos em análises técnicas que usam o EMA, MACD, por exemplo. 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.

Comments

Popular Posts