Eu tenho uma tabela de uso horário do produto quantas vezes o produto é usado data. Likewise, eu tenho os dados de uso para 4 produtos diferentes ProductId de 1 a 4 armazenados para cada hora na tabela productusage Como você pode imaginar, ele está crescendo constantemente Como o processo nocturno ETL despeja os dados para todo o dia anterior Se um produto não é usado em qualquer hora de um dia, o registro para essa hora ganhou t aparecer nesta tabela Da mesma forma, se um produto não é usado para todo o dia, Não haverá nenhum registro para esse dia na tabela que eu preciso para gerar um relatório que dá uso diário e 7 dias rolando média. E assim por diante estou planejando criar uma Visualização Indexada no SQL Server 2017 Você pode pensar em um eficiente SQL para fazer this. asked Sep 18 14 at 21 08.This é uma pergunta Evergreen Joe Celko eu ignoro qual plataforma DBMS é usado Mas em qualquer caso Joe foi capaz de responder há mais de 10 anos com SQL. Joe Celko SQL Puzzles E Respostas citação Essa última tentativa de atualização sugere que Nós 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 desnormalizará o banco de dados No entanto, se os dados históricos que estão sendo gravados não estão indo Para mudar e calcular a média móvel é caro, você pode considerar usando a 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 a partir do peso do datapoint atual 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 Densa bastante msciwoj 27 de maio 15 em 22 22.I m não seguro que sua saída esperada do resultado mostra a movimentação simples clássica simples que rola por 3 dias Porque, para e No entanto, eu sugiro a seguinte solução, que usa a função de janela AVG Esta 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 tenha dado uma solução melhor. Você vê que o AVG é envolvido com o caso quando rownum, em seguida, para forçar NULL s nas primeiras linhas, onde 3 dias Moving Average é sem sentido. 13 12. Podemos aplicar o método de junção externa deixada suja de Joe Celko como citado acima por Diego Scaravaggi para responder à pergunta como ela foi perguntada. Gera a saída solicitada. resposta Jan 9 16 at 0 33. Sua resposta.2017 Stack Exchange, Inc As médias móveis exponenciais são semelhantes às médias móveis ponderadas, uma vez que atribuem menos peso às mudanças há muito tempo e mais peso às mudanças recentes As médias móveis ponderadas são lineares, mas as médias móveis exponenciais são exponenciais Ou seja, o peso pode ser expresso como uma curva. Existe uma ótima maneira de calcular médias exponenciais em T-SQL usando um recurso não documentado sobre variáveis e totais em execução no SQL Server Nesta postagem do blog vou mostrar como usar esse método Para calcular a média móvel exponencial em T-SQL, mas também apresentarei um método que está usando recursos padrão no SQL Server Infelizmente, isso significa usar um loop. Em exemplos vou calcular uma média móvel exponencial de 9 dias Os exemplos usam o banco de dados TAdb Um script para criar TAdb pode ser encontrado here. Exponential Moving Average EMA Running totais Method. The teoria por trás da execução total recursos em atualizações é descrito em detalhes por Jeff Moden em seu artigo Resolvendo o Running Total e Ordinal Rank Problems. Other recursos que Descrever o uso deste método para calcular EMA são a postagem no blog Calculando médias móveis com T-SQL por Gabriel Priester eo post do fórum Exponential Moving Average Challenge tanto no SQL Server Cent Ral. Basicamente, em T-SQL você pode atualizar variáveis, bem como colunas em uma instrução de atualização As atualizações são feitas linha a linha internamente pelo SQL Server Este comportamento row by row é o que torna o cálculo de um total running. This exemplo mostra como ele Note que ColumnRunningTotal é um total de ColumnToSum. Usando este método, podemos calcular EMA9 com este T-SQL. O cálculo de EMA é bastante simples Usamos a linha atual e a anterior, mas com mais peso para a linha atual. O peso é calculado pela fórmula 2 1 9, onde 9 é o parâmetro para o comprimento do EMA Para calcular EMA9 para a linha 10 acima, o cálculo é. Neste caso, a linha atual recebe 20 do peso 2 1 9 0 2 e A linha anterior recebe 80 do peso 1-2 1 9 0 8.Você encontrar esse cálculo na declaração acima na instrução CASE. Motiva exponencial EMA Looping Method. As que eu saiba, exceto para o método de totais em execução descrito acima , Não há maneira de calcular EMA usando um conjunto b Ased instrução SQL Portanto, o T-SQL abaixo está usando um loop while para calcular EMA9.Os resultados são os mesmos que no exemplo de totais em execução acima. Como esperado, o conjunto baseado execução totais versão é muito mais rápido do que a versão de loop On my A solução baseada em conjunto foi de cerca de 300 ms, em comparação com cerca de 1200 com a versão loop A versão loop é mais conforme aos padrões SQL no entanto Por isso, a escolha entre os métodos depende do que é mais importante para você, Média pode ser usada na análise de tendência, como com os outros tipos de médias móveis, média movente simples SMA e WMA média ponderada móvel. Há também outros cálculos na análise técnica que usa o EMA, MACD por exemplo. Este borne do blog é parte de Uma série sobre análise técnica, TA, no SQL Server Veja os outros posts here. Posted por Tomas Lind. Tomas Lind - Serviços de consultoria como SQL Server DBA e Database Developer em High Coast Database Solutions AB.
No comments:
Post a Comment