Movendo Média Em Sql 2008


Estou trabalhando com o SQL Server 2008 R2, tentando calcular uma média móvel Para cada registro na minha visão, eu gostaria de coletar os valores dos 250 registros anteriores e, em seguida, calcular a média para esta seleção. Minha coluna são as seguintes. TransactionID é exclusivo Para cada TransactionID Gostaria de calcular a média para o valor da coluna, sobre os anteriores 250 registros Então, para TransactionID 300, coletar todos os valores de 250 linhas anteriores exibição é ordenada decrescente por TransactionID e, em seguida, na coluna MovAvg escrever o resultado do Média desses valores Eu estou olhando para coletar dados dentro de um intervalo de registros. asked Oct 28 14 at 20 58.This é uma pergunta Evergreen Joe Celko eu ignoro qual plataforma DBMS é usado Mas em qualquer caso Joe foi capaz de responder mais de 10 Anos atrás com o padrão SQL. 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 consulta ap Proach better A consulta é tecnicamente melhor porque a abordagem UPDATE irá desnormalizar o banco de dados No entanto, se os dados históricos sendo gravados não vai mudar e computar a média móvel é caro, você pode considerar usando a coluna approach. SQL quebra-cabeça query. by todos Significa uniforme Você apenas joga para o balde de peso apropriado, dependendo da distância do ponto de tempo atual Por exemplo, pegue peso 1 para datapoints dentro de 24 horas a partir do peso datapoint atual 0 5 para datapoints dentro de 48hrs Esse caso importa quantos datapoints consecutivos como 6 12am e 11 48pm estão distantes um do outro 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 msciwoj 27 de maio 15 em 22 22.I m não tenho certeza de que seu resultado esperado mostre clássico simples rolante Média por 3 dias Porque, por exemplo, o primeiro triplo de números por definição dá. Mas você espera 4 360 e é confuso. No entanto, sugiro A seguinte solução, que usa a função de janela AVG Esta abordagem é muito mais eficiente e clara e menos recursos 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 é embrulhado com Caso, quando rownum, em seguida, forçar NULL s nas primeiras linhas, onde 3 dias Média Móvel é sem sentido. Respondido fevereiro 23 16 em 13 12.Nós podemos aplicar Joe Celko s sujo lado esquerdo juntar método como citado acima por Diego Scaravaggi para responder à pergunta como Foi solicitado. Gera a saída solicitada. resposta Jan 9 16 em 0 33.Your Answer.2017 Stack Exchange, Inc. De acordo com sua descrição, você tem uma matriz em seu relatório Agora você quer calcular o valor médio dos últimos 6 meses Direito. No Reporting Service, podemos colocar código personalizado no relatório para lidar com lógica complicada Adicionar uma coluna mais coluna dentro do grupo e chamar as funções definidas no código personalizado Para a sua exigência, modificamos o código de Robert s para alcançar seu objetivo Testamos seu caso dentro Nosso ambiente local com dados de exemplo Aqui estão os passos e screenshots para sua referência. Put o código personalizado no relatório Private queueLength As Inteiro 6 Private queueSum As Duplo 0 Private queueFull As Boolean False Private idChange As String Dim fila Como Novo Inteiro Public Function CumulativeQueue ByVal currentValue Id como string como objeto Dim removedValue como duplo 0 Se idChange id então ClearQueue idChange id queueSum 0 queueFull False CumulativeQueue currentValue, id Else Se queueLength Then removidoValue End If queueSum currentValue queueSum - removedValue Se queueLength Then Return Nothing ElseIf queueLength e queueFull False Então queueFull True Retornar queueSum queueLength Else Retornar queueSum queueLength End If End If End Função public function ClearQueue Dim i como Integer Dim n como Integer para em Para 0 Passo-1 próximo i End function. Add mais uma linha dentro do grupo, chamar a função Definido no código personalizado. Save e pré-visualização Parece que abaixo. Se você tiver alguma pergunta, p Lease sinta-se livre para ask. Best Regards, Simon Hou Pactera. Wednesday, 14 de maio de 2014 12 36 respostas PM. All você pode usar a função RunningValue para this. something como below. Please Mark This As Answer se ele ajuda a resolver o Questão Visakh. According a sua descrição, você tem uma matriz em seu relatório Agora você quer calcular o valor médio de últimos 6 meses Right. In Reporting Service, podemos colocar código personalizado no relatório para lidar com lógica complicada Adicionar mais uma coluna linha Dentro do grupo e chamar as funções definidas no código personalizado Para a sua exigência nós modificamos o código de Robert s para alcançar seu objetivo Testamos seu caso em nosso ambiente local com dados de amostra Aqui estão os passos e screenshots para sua referência. Putar o código personalizado no relatório Privado QueueLength As Inteiro 6 Private queueSum As Duplo 0 Private queueFull As Boolean False Private idChange As String Dim fila Como Novo Inteiro Public Function CumulativeQueue ByVal currentValue As Inteiro, id As String como Object Dim removedValue Como Duplo 0 Se idChange id então ClearQueue idChange id queueSum 0 queueFull False CumulativeQueue currentValue, id Else Se queueLength Then removedValue End Se queueSum currentValue queueSum - removedValue Se queueLength Then Return Nothing ElseIf queueLength E queueFull False Then queueFull True Retornar queueSum queueLength Else Retornar queueSum queueLength End If End If End Function função pública ClearQueue Dim i como Integer Dim n como Integer para em Para 0 Step-1 next i End function. Adicionar mais uma linha dentro do grupo, chamar a função definida no código personalizado. Save e preview It looks Como abaixo. Se você tiver qualquer pergunta, por favor, sinta-se livre para ask. Best Regards, Simon Hou Pactera. Wednesday, 14 de maio de 2014 12 36 PM. Microsoft está realizando uma pesquisa on-line para entender a sua opinião do site Technet Se você escolher Para participar, a pesquisa on-line será apresentada a você quando você deixar o site da Web Technet. Você gostaria de participar. 2017 Microsoft Todos os direitos reservados.

Comments