Esta é uma pergunta de Evergreen Joe Celko. Eu ignoro qual plataforma DBMS é usada. Mas em qualquer caso Joe foi capaz de responder há mais de 10 anos com SQL padrão. Joe Celko SQL Quebra-Cabeças e Respostas 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 Desnormalizar o banco de dados. No entanto, se os dados históricos que estão sendo gravados não vai mudar ea computação da média móvel é cara, você pode considerar usar a abordagem de coluna. SQL consulta quebra-cabeça: por todos os meios uniforme. Você apenas joga para o balde de peso apropriado, dependendo da distância do ponto de tempo atual. Por exemplo quottake weight1 para datapoints dentro de 24hrs de datapoint atual weight0.5 para datapoints dentro de 48hrsquot. Esse caso importa quanto pontos de dados consecutivos (como 6:12 am e 11:48 pm) 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 densos o suficiente ndash msciwoj May 27 15 at 22:22 Eu não tenho certeza que seu resultado esperado (saída) mostra clássico simples movendo (rolando) média de 3 dias. Porque, por exemplo, o primeiro triplo de números por definição dá: mas você espera 4.360 e sua confusão. No entanto, sugiro a seguinte solução, que usa a função de janela AVG. Essa abordagem é muito mais eficiente (clara e menos intensiva em recursos) 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 gt p. days, em seguida, para forçar NULL s nas primeiras linhas, onde 3 dias Moving Average é sem sentido. Respondeu Feb 23 at 13:12 Podemos aplicar Joe Celkos suja deixada externa juntar método (como citado acima por Diego Scaravaggi) para responder à pergunta como foi perguntado. Gera a saída solicitada: respondida Jan 9 at 0:33 Sua resposta 2017 Stack Exchange, IncAVG (Transact-SQL) ALL Aplica a função de agregação a todos os valores. ALL é o padrão. DISTINCT Especifica que o AVG seja executado somente em cada instância exclusiva de um valor, independentemente do número de vezes que o valor ocorrer. Expressão É uma expressão da categoria de tipo de dados numérico exata ou aproximada, exceto para o tipo de dados bit. Não são permitidas funções agregadas e subconsultas. OVER (partitionbyclause orderbyclause) partitionbyclause divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função é aplicada. Se não for especificado, a função trata todas as linhas do conjunto de resultados da consulta como um único grupo. Orderbyclause determina a ordem lógica na qual a operação é executada. Pedido por cláusula é necessária. Para obter mais informações, consulte Cláusula OVER (Transact-SQL). O tipo de retorno é determinado pelo tipo de resultado avaliado da expressão. Decimal category (p, s) Se o tipo de dados de expressão é um tipo de dados de alias, o tipo de retorno também é do tipo de dados de alias. No entanto, se o tipo de dados base do tipo de dados de alias é promovido, por exemplo de tinyint para int. O valor de retorno é do tipo de dados promovido e não o tipo de dados alias. AVG () calcula a média de um conjunto de valores dividindo a soma desses valores pela contagem de valores nonnull. Se a soma exceder o valor máximo para o tipo de dados do valor de retorno um erro será retornado. O AVG é uma função determinística quando usado sem as cláusulas OVER e ORDER BY. Ele é não-determinístico quando especificado com as cláusulas OVER e ORDER BY. Para obter mais informações, consulte Funções determinísticas e não determinísticas. A. Usando as funções SUM e AVG para cálculos O exemplo a seguir calcula as horas de férias médias e a soma das horas de folga que os vice-presidentes de Ciclos de Trabalho Aventuras usaram. Cada uma dessas funções agregadas produz um único valor de resumo para todas as linhas recuperadas. O exemplo usa o banco de dados AdventureWorks2017.Movendo Média em Query Re: Média em Movimento em Query Você quer dizer apenas os dados mais recentes de quatro semanas (por isso está mudando / movendo a cada semana) O que os dados em seu campo YearWeek parecem É formatado Como Texto do Número DICAS PARA ENCONTRAR AS SOLUÇÕES EXCEL 1. Use a Ajuda embutida que vem com o Excel / Access 2. Use a funcionalidade de Pesquisa nesta placa 3. Um monte de código VBA pode ser adquirido usando o Gravador de Macro. Dê a um homem um peixe, alimente-o por um dia. Ensinar um homem a pescar, alimentá-lo para a vida Gerrit. B disse: 06 de maio de 2017 17:31 Re: Movendo Média em Query Joe4, Não eu quero calcular a média móvel durante 4 semanas. Campo YearWeek parece 201701 para a semana 1 de 2017, e é formatado como número. Re: Movendo Média em Query OK, independentemente de suas respostas às perguntas anteriores, acho que tenho uma solução que deve funcionar para qualquer instância. Primeiro, criei uma função definida pelo usuário que converte seu número de semana para um número total de semanas. Leva o ano e multiplica por 52, e depois adiciona os meses nas últimas duas posições de número. Esse UDF se parece com isto: Note, não é necessário usar um UDF, como você pode usar esta fórmula diretamente em suas consultas, mas desde que eu estou reutilizando, é muitas vezes mais fácil e torna suas fórmulas mais legível para fazê-lo deste jeito. Em seguida, criei uma consulta para calcular o máximo YearWeek para cada combinação de área / produto ID. Acabei de agrupar os campos Área e ID do produto e tomou o valor máximo de Anual (se você não estiver familiarizado com Consultas de Agregação, eu recomendo que eles sejam verificados nos arquivos de Ajuda embutidos do Access). Assumindo um nome de tabela de MyTable, aqui está o que o código SQL daquela consulta se parece com: Eu chamei essa consulta MyMaxQuery. Eu, em seguida, criei uma nova consulta em que juntamos a tabela original (MyTable) a esta consulta nos campos Área e ID do produto. Eu então criei um campo calculado chamado Check, onde verifico para ver se o campo YearMonth é maior ou igual ao valor máximo de YearWeek (a partir da consulta anterior) menos 3. Se for, eu retornar um 1. Eu, em seguida, adicionar critérios Para essa consulta para retornar apenas os valores iguais a 1. Assim, isso limita os dados para os últimos 4 meses. Agora, eu mudo esta consulta para uma consulta de agregação e pegue a média da quantidade para obter o que você deseja. O código SQL para essa consulta é semelhante a: Dicas para encontrar soluções Excel 1. Use a Ajuda embutida que vem com o Excel / Access 2. Use a funcionalidade de pesquisa nesta placa 3. Um monte de código VBA pode ser adquirido usando o Gravador De Macro. Dê a um homem um peixe, alimente-o por um dia. Ensine um homem a pescar, alimente-o para a vida
No comments:
Post a Comment