Friday, 3 November 2017

Mudando Média Ms Sql


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 esta seleção. As minhas colunas de exibição são as seguintes: TransactionID é exclusivo. Para cada ID de transação. Gostaria de calcular a média do valor da coluna, em relação aos 250 registros anteriores. Então, para TransactionID 300, colete todos os valores das 250 linhas anteriores (a exibição é ordenada por TransactionID) e, em seguida, na coluna MovAvg, escreva o resultado da média desses valores. Estou procurando coletar dados dentro de uma variedade de registros. Perguntou 28 de outubro às 20: 58 Esta é uma pergunta 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. Joe Celko SQL Puzzles and Answers citação: 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ê simplesmente 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 am e 11:48 pm) 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 são suficientemente densos. 22:22 Não tenho certeza se o resultado esperado (saída) mostra uma média simples de movimentação simples (rolando) durante 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 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 linhas, onde 3 Day Moving Average não tem sentido. Respondeu 23 de fevereiro à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 conforme foi solicitado. Gera a saída solicitada: respondeu Jan 9 16 às 0:33 Sua resposta 2017 Stack Exchange, IncPorventadamente, discutimos como escrever médias rolantes no Postgres. Pela demanda popular, você mostrou 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 correlacionadas - bem, cubra os dois primeiros. Bem, comece com uma média anterior, o que significa que o ponto médio no 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. A média de roteamento do Postgres Afortunadamente, o Postgres possui 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 contra uma tabela com linhas de data densas. MySQL Rolling Average 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 feito 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 Nós focamos a média de 7 dias na seguinte publicação. Se quisermos ver a média líder de 7 dias, é tão simples como classificar as datas na outra direção. Se quisermos olhar para 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)

No comments:

Post a Comment