Thursday 17 August 2017

7 Dia Mover Média Em Sql


Eu tenho uma tabela de dados horários de uso do produto (quantas vezes o produto é usado) dados. Da mesma forma, eu tenho os dados de uso para 4 produtos diferentes (ProductId de 1 a 4) armazenados por hora na tabela de processamento de produtos. Como você pode imaginar, está crescendo constantemente, enquanto o processo ETL noturno despeja os dados durante todo o dia anterior. Se um produto não for usado em qualquer hora de um dia, o registro para essa hora não aparecerá nesta tabela. Da mesma forma, se um produto não for usado durante todo o dia, não haverá nenhum registro para esse dia na tabela. Eu preciso gerar um relatório que dê uso diário e os últimos 7 dias de média móvel e assim por diante. Estou planejando criar uma Visualização Indexada no servidor SQL 2014. Você pode pensar em uma consulta SQL eficiente para fazer isso, perguntou 18 de setembro às 21: 08Utilizar 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 em conjunto com a média móvel do valor de hoje e os dias de ontem: a cláusula WINDOW nas linhas 21 a 23 define uma janela em movimento que contém duas linhas: linha de hoje (LIGA ATUAL) e 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