Monday 14 August 2017

Mysql Moving Average Calculation


Quando eu tive um problema semelhante, acabei usando tabelas temporárias por uma variedade de razões, mas isso tornou muito mais fácil o que eu fiz parece muito parecido com o que você está fazendo, tanto quanto o esquema vai. Faça do esquema algo como identidade ID, startdate, enddate, value. Quando você seleciona, faça uma subseqüência média dos 20 anteriores com base na identificação de identidade. Apenas faça isso se você já estiver usando tabelas temporárias por outros motivos (acesse as mesmas linhas uma e outra vez para métricas diferentes, por isso foi útil ter o pequeno conjunto de dados). Na minha experiência, Mysql a partir de 5.5.x tende a não usar índices de seleção dependente, seja uma subconsulta ou uma associação. Isso pode ter um impacto muito significativo no desempenho em que o critério de seleção dependente muda em cada linha. A média móvel é um exemplo de uma consulta que se enquadra nesta categoria. O tempo de execução pode aumentar com o quadrado das linhas. Para evitar isso, escolha um mecanismo de banco de dados que possa realizar pesquisas indexadas em opções dependentes. Acho que o Postgres funciona efetivamente para esse problema. Respondeu 2 de julho 14 às 8:01 Sua resposta 2017 Stack Exchange, IncPorviamente, 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)

No comments:

Post a Comment