Moving average in sql


Estou trabalhando com o SQL Server 2008 R2, tentando calcular uma média móvel Para cada registro na minha visão, eu gostaria de coletar os valores dos 250 registros anteriores e, em seguida, calcular a média para esta seleção. Minha coluna são as seguintes. TransactionID é exclusivo Para cada TransactionID Gostaria de calcular a média para o valor da coluna, sobre os anteriores 250 registros Então, 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 do A média desses valores Eu estou olhando para coletar dados dentro de um intervalo de registros. asked Oct 28 14 at 20 58.Previamente, discutimos como escrever médias rolando em Postgres Por demanda popular estamos mostrando-lhe como fazer o mesmo em MySQL e SQL Server. We ll cobrir como anotar gráficos barulhentos como this. With um 7-dia anterior linha média como this. The Big Idea. Our primeiro gráfico acima é muito barulhento e difícil de obter informações úteis de Nós podemos suavizar por p Loting uma média de 7 dias sobre os dados subjacentes Isso pode ser feito com funções de janela, auto-uniões ou subconsultas correlacionadas - vamos cobrir os dois primeiros. Vamos começar com uma média anterior, o que significa que o ponto médio em O dia 7 do mês é a média dos primeiros sete dias. Visualmente isso desloca os picos no gráfico para a direita, como um pico grande é calculado em média nos sete dias seguintes. Primeiro, crie uma tabela de contagem intermediária. Queremos calcular Uma média sobre o total de inscrições para cada dia Assumindo que temos uma tabela de usuários típicos com uma linha por novo usuário e um timestamp createdat, podemos criar nossa tabela agregados de inscrições como so. In PostgreSQL e SQL Server você pode usar isso como um CTE No MySQL você pode salvá-lo como uma tabela temporária. Postgres Rolling Average. Fortunately Postgres tem funções de janela que são a maneira mais simples para calcular uma média em execução. Esta consulta assume que as datas não têm lacunas A consulta é a média das últimas sete linhas , Não o passado se Se seus dados tiverem lacunas, preenchê-los com generateseries ou juntar-se contra uma tabela com datas densas rows. MySQL Rolling Average. MySQL não tem funções de janela, mas podemos fazer um cálculo semelhante usando auto-uniões Para cada linha na nossa tabela de contagem , Juntamos todas as linhas que estavam nos últimos sete dias e tomamos a consulta average. This automaticamente lida com lacunas de data, como estamos olhando para linhas dentro de um intervalo de datas, em vez do anterior N rows. SQL Server Rolling Average. SQL Server tem janela Para simplificar, estamos usando a versão MySQL com uma auto join. This é conceitualmente o mesmo que no MySQL As traduções só são a função dateadd e explicitamente nomeado Grupo por colunas. Outras médias. Nós nos concentramos na média de sete dias de atraso neste post Se quiséssemos olhar para a média de 7 dias de liderança, é tão simples como classificar as datas na outra direção Se quiséssemos olhar Um centro Ed média, nós d use. Postgres linhas entre 3 precedente e 3 following. MySql entre - 3 e 3 no MySQL. SQL Server entre dateadd dia, -3 e dateadd dia, 3. Esta é uma pergunta Evergreen Joe Celko eu ignoro qual DBMS plataforma é usada Mas em qualquer caso, Joe foi capaz de responder mais de 10 anos atrás com SQL padrão. Joe Celko SQL Quebra-cabeças e respostas citação Essa última tentativa de atualização sugere que poderíamos usar o predicado para construir uma consulta que nos daria um movimento A consulta é tecnicamente melhor porque a abordagem UPDATE irá desnormalizar o banco de dados. No entanto, se os dados históricos que estão sendo gravados não vão mudar ea computação da média móvel é cara, você pode considerar usar o método Coluna approach. SQL Quebra-cabeça query. by todos os meios uniforme Você apenas atirar para o balde de peso apropriado, dependendo da distância do ponto de tempo atual Por exemplo, tomar peso 1 para datapoints dentro de 24 horas do datapoint atual Peso 0 5 para datapoints dentro de 48hrs Esse caso é importante quanto datapoints consecutivos como 6 12am e 11 48pm 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 msciwoj 27 de maio 15 a 22 22.Não tenho certeza se sua saída de resultado esperada mostra uma média simples de rolamento móvel simples por 3 dias Porque, por exemplo, o primeiro triplo de números por definição dá. Mas você espera 4 360 e é confuso. Sugerimos a seguinte solução, que usa a função de janela AVG Essa abordagem é muito mais eficiente e clara e menos recursos intensivos do que o SELF-JOIN introduzido em outras respostas e estou surpreso que ninguém deu uma solução melhor. Você vê que o AVG é embrulhado Com o caso quando rownum então para forçar NULL s nas primeiras fileiras, onde a média móvel de 3 dias é meaningless. answered fevereiro 23 16 em 13 12.We pode aplicar Joe Celko s sujo deixaram o método exterior da junção como cited acima por Diego Scaravaggi para responder A pergunta como foi perguntado. Gera o pedido output. answered Jan 9 16 em 0 33.Your Answer.2017 Stack Exchange, Inc.

Comments