Friday, 9 August 2019

Moving average in 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 essa seleção. As colunas de exibição são as seguintes: TransactionID é exclusivo. Para cada TransactionID. Eu gostaria de calcular a média para o valor da coluna, sobre os anteriores 250 registros. Assim para TransactionID 300, coletar todos os valores de 250 linhas anteriores (exibição é classificada decrescente por TransactionID) e, em seguida, na coluna MovAvg gravar o resultado da média desses valores. Eu estou olhando para coletar dados dentro de um intervalo de registros. Perguntou Oct 28 14 at 20: 58Estou tentando ter uma coluna média em execução na instrução SELECT com base em uma coluna das linhas n anterior na mesma instrução SELECT. A média que eu preciso é baseada nas n linhas anteriores no resultset. As primeiras 3 linhas da coluna Média são nulas porque não há linhas anteriores. A linha 4 na coluna Média mostra a média da coluna Número das 3 linhas anteriores. Eu preciso de alguma ajuda tentando construir uma instrução SQL Select que fará isso. Uma simples auto join parece funcionar muito melhor do que uma linha referenciando subconsulta Gerar 10k linhas de dados de teste: Eu puxaria o caso especial das primeiras 3 linhas fora da consulta principal, você pode unir todos aqueles de volta em se você realmente quiser No conjunto de linhas. Consulta de associação automática: Na minha máquina isso leva cerca de 10 segundos, a abordagem de subconsulta que Aaron Alton demonstrou demora cerca de 45 segundos (depois que eu mudei para refletir a minha tabela de fonte de teste): Se você fizer um SET STATISTICS PERFIL ON, você pode ver o Self join tem 10k executa no spool de tabela. A subconsulta tem 10k executa no filtro, agregado e outros steps. AVG (Transact-SQL) ALL Aplica a função agregada a todos os valores. ALL é o padrão. DISTINCT Especifica que o AVG deve ser executado somente em cada instância exclusiva de um valor, independentemente do número de vezes que o valor ocorre. Expressão É uma expressão da categoria de tipo de dados numérico exata ou aproximada, exceto para o tipo de dados bit. Funções agregadas e 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. 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. Categoria decimal (p, s) Se o tipo de dados de expressão 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 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 ea soma de 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.

No comments:

Post a Comment