Sunday 12 November 2017

Moving Average Sql Server 2008


Estou trabalhando com o SQL Server 2008 R2, tentando calcular uma média móvel. Para cada registro na minha opinião, gostaria de coletar os valores dos 250 registros anteriores e, em seguida, calcular a média para esta seleção. As minhas colunas de exibição são as seguintes: TransactionID é exclusivo. Para cada ID de transação. Gostaria de calcular a média do valor da coluna, em relação aos 250 registros anteriores. Então, para TransactionID 300, colete todos os valores das 250 linhas anteriores (a exibição é ordenada por TransactionID) e, em seguida, na coluna MovAvg, escreva o resultado da média desses valores. Estou procurando coletar dados dentro de uma variedade de registros. Perguntou 28 de outubro às 20: 58 Estou tentando criar uma função que computa uma média móvel com janelas no SQLServer 2008. Eu sou bastante novo no SQL, então estou tendo um pouco de dificuldade. Os dados que eu estou tentando executar a média móvel precisam ser agrupados por dia (são todos os dados de data / hora) e, em seguida, uma janela de variável média média precisa ser aplicada a ele. Eu já tenho uma função que agrupa os dados por dia (e id) que é mostrado na parte inferior. Tenho algumas perguntas: seria melhor chamar a função de agrupamento dentro da função de média móvel ou devo fazê-lo tudo de uma vez. É possível obter a média móvel para as datas de entrada na função, mas voltar n dias para Comece a média móvel para que os primeiros n dias dos dados retornados não tenham 0 para sua média (ou seja, se eles querem uma média móvel de 7 dias de 01-08-2011 a 02-08-2011 que eu comece a média móvel Cálculo em 01-01-2011 para que o primeiro dia que definiu tenha um valor) Estou no processo de olhar para como fazer a média móvel e sei que uma janela em movimento parece ser a melhor opção (currentSum prevSum todayCount - NthDayAgoCount) nDays, mas ainda estou trabalhando para descobrir a implementação do SQL. Eu tenho uma função de agrupamento que se parece com isso (algumas variáveis ​​removidas para fins de visibilidade): O que retorna uma tabela como assim: EDIT: Para responder a primeira pergunta que eu fiz: acabei criando uma função que declarou uma tabela temporária e inseriu os resultados A partir da função de contagem, usou o exemplo do user662852 para calcular a média móvel. Tire o intervalo de datas codificado da sua consulta. Escreva a saída (como a sua amostra no final) para uma tabela temporária (eu liguei para visitas abaixo). Experimente essa auto-união com a tabela temporária: EDIT: Eu não tive espaço suficiente em comentários para dizer isso em resposta à sua pergunta: minha união é um pouco cartesiana porque usa um entre na restrição de junção. Cada registro na lista está subindo contra todos os outros registros, e então eu quero aqueles em que a data que eu relatei está entre um limite menor (-7) dias e hoje. Cada data data está disponível para listar a data, esta é a chave da sua pergunta. Eu poderia ter escrito a condição de junção. Mas o que realmente aconteceu foi que eu testei isso porque não retorna registros porque a sintaxe está entre LOW e HIGH. Eu falei com 0 registros e troquei os argumentos, isso é tudo. Experimente o seguinte, veja o que quero dizer: Esta é a junção cartesiana para apenas um lista de discussão: Compare isso com a condição de associação real Veja como a data da lista está entre datadate e dataplus6 em todos os recordsAVG (Transact-SQL) ALL Aplica a função agregada para Todos os valores. ALL é o padrão. DISTINCT Especifica que o AVG seja executado apenas em cada instância única de um valor, independentemente de quantas vezes o valor ocorra. Expressão É uma expressão da categoria de tipo numérico numérico ou aproximado, exceto para o tipo de dados de bits. As funções agregadas e as subconsultas não são permitidas. OVER (partitionbyclause orderbyclause) partitionbyclause divide o conjunto de resultados produzido pela cláusula FROM em partições para as 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. Por favor, é necessário um pedido. Para obter mais informações, consulte a Cláusula Over (Transact-SQL). O tipo de retorno é determinado pelo tipo de resultado avaliado da expressão. Categoria decimal (p, s) Se o tipo de expressão de dados for 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 de base do tipo de dados de alias for promovido, por exemplo, de tinyint para int. O valor de retorno é do tipo de dados promovido e não o tipo de dados de 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 determinista quando usado sem as cláusulas OVER e ORDER BY. Não é determinista 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 médias de férias e a soma das horas de licença por doença que os vice-presidentes da Adventure Works Cycles 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 AdventureWorks2012.

No comments:

Post a Comment