Thursday 17 August 2017

Oracle Moving Average Query


Esta é uma questão 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. Citação de Joe Celko SQL Puzzles and Answers: 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ê apenas 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 e 11:48) 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 forem suficientemente densos. 22:22 Não estou certo de que seu resultado esperado (saída) mostre uma média simples em movimento simples (rolando) por 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 o 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 filas, 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 como foi feita. Gera a saída solicitada: respondeu Jan 9 às 0:33 Sua resposta 2016 Stack Exchange, IncUtilizar uma média móvel simples para suavizar os dados é uma técnica bastante popular. É muito ruim o principal exemplo na Ajuda do SQL Anywhere está longe de ser simples: o que torna esse exemplo tão complexo Além da declaração do problema, isto é: calcular a média móvel de todas as vendas de produtos, por mês, no ano 2000. Heres o que faz É complexo: duas referências à função AVG (), um GROUP BY (que, por si só, faz praticamente qualquer SELECT, um scratcher principal),. Uma cláusula WINDOW Stealth uma cláusula WINDOW que nem sequer usa a palavra-chave WINDOW. Então, para os não iniciados (as pessoas que precisam de exemplos mais do que ninguém), não é óbvio que um WINDOW esteja envolvido. Não é apenas qualquer cláusula WINDOW, tenha em atenção você, mas que inclui todos os componentes que você pode codificar em uma cláusula WINDOW: a PARTITION BY, RANGE. Não é uma cláusula ROWS simples, mas uma cláusula RANGE completa, uma que possui um relacionamento íntimo com o ORDER BY. Eu sei o que é uma linha, mas o que o redacto é uma GAMA Mas aguarde, há mais: a escolha da GAMA sobre ROWS neste exemplo é fundamental para a operação correta da consulta. (Para uma discussão mais completa deste exemplo particular, veja o Exemplo 23 - Computando uma Média em Movimento no excelente papel branco OLAP de Glenn Paulleys). Agora, vamos voltar à pista: Uma Média Mínima Realmente Simples O seguinte exemplo mostra 10 dias de valor Dados juntamente com a média móvel do valor de hoje e os ontem: a cláusula WINDOW nas linhas 21 a 23 define uma janela em movimento que contém duas linhas: a linha de hoje (LIGA ATUAL) e a linha de ontem (1 PRECEDING): a cláusula WINDOW ORDER BY determina o que PRECEDING significa (a linha anterior por t. entrydate) ea cláusula ROWS determina o tamanho da janela (sempre duas linhas). A expressão AVG (t. value) OVER twodays na linha 19 refere-se à cláusula WINDOW pelo nome, e informa o SQL Anywhere para calcular a média dos dois valores de t. value que existem na janela deslizante de 2 filas, para cada um Linha no conjunto de resultados. Então, para 2012-02-02 a média de 10 e 20 é 15.000000, para 2012-02-03 a média de 20 e 10 é 15.000000, para 2012-02-04 a média de 10 e 30 é 20.000000, para 2012- 02-10 a média de 10 e 60 é 35.000000. Ops, e a primeira linha A linha 2012-02-01 não tem uma linha PRECEDING, então qual é a média na janela móvel De acordo com o documento branco de Glenn Paulleys no caso de uma janela em movimento, presume-se que as linhas que contenham Null Os valores existem antes da primeira linha, e após a última linha, na entrada. Isso significa que quando a janela de mudança tem 2012-02-01 como a FIÇÃO ATUAL, a linha 1 PRECEDING contém valores NULL. E quando o SQL Anywhere calcula um AVG () que inclui um valor NULL, ele não conta o NULL. Não no numerador ou no denominador ao calcular a média. Sua prova: é por isso que twodayaverage 10.000000 para a primeira linha 2012-02-01. Postado por Breck Carter às 15:47

No comments:

Post a Comment