Friday, 28 July 2017

Pl Sql Moving Average


Eu li a discussão que você mencionou. É aplicável ao PostgreSQL, uma vez que é permitido criar uma função agregada definida pelo usuário usando SQL no PostgreSQL, mas não é permitido no SQL Server. O uso de CTE recursivo é uma maneira viável no SQL Server, mas percebo que a maneira CTE pode resultar em mais varredura de tabela do que as funções da janela. Então eu faço essa publicação para perguntar se é possível calcular a média móvel exponencial usando a função de janela do SQL Server 2012, como calcular a média móvel simples. Ndash xiagao1982 14 de abril de 13 às 2:53 Primeiro, você calcula o EMA (SMA (x)) em vez do EMA (x). Em segundo lugar, seu quotmoothing constantquot é, na verdade, o valor beta da minha fórmula, e não o alfa. Com essas duas mudanças, o SQLFiddle parece assim: sqlfiddle6191921 No entanto, ainda existe uma pequena diferença entre o resultado real e o resultado esperado. Eu voltaria e veria se a sua definição EMA corresponde ao que eu conheço. Ndash Sebastian Meine 7 de maio 13 às 13:46 Eu simplesmente olhei para o formulário na planilha que você anexou e está fora da definição EMA padrão. Minha fórmula calcula a média móvel exponencial das últimas dez linhas. A planilha calcula primeiro a média padrão nas últimas dez linhas e, em seguida, a média móvel ponderada exponencialmente irrestrita em todas as médias. Isso segue o formulário aqui: en. wikipedia. orgwikiEWMAchart ndash Sebastian Meine 7 de maio 13 às 13: 52Há uma boa pergunta sobre a OTN hoje sobre se há uma função padrão do Oracle para calcular a média móvel exponencial. A resposta é que não existe essa função, mas com a cláusula modelo, você pode calcular isso muito facilmente. E é um ótimo exemplo do que quero dizer com um número variável de cálculos com base em valores calculados, escrito na minha terceira parte do tutorial da cláusula modelo. Antes de hoje, nem sabia o que era uma média móvel exponencial. Você pode ler mais sobre isso aqui na Wikipédia ou aqui com um bom exemplo. Do primeiro link: uma média móvel exponencial (EMA), aplica fatores de ponderação que diminuem exponencialmente. A ponderação para cada ponto de dados mais antigo diminui exponencialmente, dando muito mais importância às observações recentes enquanto ainda não descarta as observações antigas inteiramente. Do segundo link: A fórmula para o cálculo de uma média móvel exponencial (EMA) é: X EMA atual (ou seja, EMA a ser calculado) C Valor de dados original atual K Constante de suavização P EMA anterior (O primeiro EMA no intervalo a ser calculado é Arbitrário e pode ser o valor de dados original correspondente ou, muitas vezes, um valor de média móvel simples. K Constante de suavização 2 (1 n) E esta fórmula é seguida por um exemplo que eu estendi um pouco, usando esta tabela: Os registros do produto A Combine o exemplo no link. Eu compus os números do produto B. Aqui está a consulta de cláusula de modelo que implementa a fórmula. Observe como a fórmula se traduz diretamente na única e única regra da cláusula do modelo. A constante de suavização K está configurada Para .5, com base em uma janela de valores (n) igual a 3. Desafio: experimente isso sem a cláusula do modelo e veja se você pode encontrar algo mais abrangente. 5 comentários: 11.2 recursos em uso com esse como (selecione o produto 39A39 . Data 392009-01-0139 mês, 10 quantidade de dupla união seleciona todos 39A39, data 392009-02-0139, 15 de dupla união seleciona 39A39, data 392009-03-0139, 17 de dupla união seleciona 39A39, data 392009-04-0139, 20 de dupla união Todos selecionam 39A39, data 392009-05-0139, 22 de dupla união, todos selecionam 39A39, data 392009-06-0139, 20 de união dupla, todos selecionam 39A39, data 392009-07-0139, 25 de união dupla, todos selecionam 39A39, data 392009-08-0139, 27 de dupla união, todos selecionam 39A39, data 392009-09-0139, 30 de união dupla, todos selecionados 39A39, data 392009-10-0139, 35 de dupla união, todos selecionados 39A39, data 392009-11-0139 , 37 da união dupla, todos selecionam 39A39, data 392009-12-0139, 40 da dupla união, todos os 39B39, data 392009-01-0139, 0 da união dupla, todos selecionam 39B39, data 392009-02-0139, 50 da dupla união Todos selecionam 39B39, data 392009-03-0139, 10 de dupla união todos selecionam 39B39, data 392009-04-0139, 40 de dupla união todos selecionam 39B39, data 392009-05-0139, 15 de união dupla todos selecionam 39B39, data 392009-06-0139, 35 de União dupla, selecione 39B39, data 392009-07-0139, 30 de dupla união, selecione 39B39, data 392009-08-0139, 30 de união dupla, selecione 39B39, data 392009-09-0139, 20 de dupla união, selecione tudo 39B39 , Data 392009-10-0139, 20 da união dupla, selecione 39B39, data 392009-11-0139, 20 da união dupla, selecione 39B39, data 392009-12-0139, 20 a partir de dual), rns as (selecione isso. . Rownumber () over (partição por produto ordem por mês) rn -. 2 (1count () over (partição por produto)) k. 0,5 k do dat), res (produto, mês, quantidade, rn, x) como (selecione r. product, r. month, r. amount, r. rn, r. mount x de rns r onde rn 1 union seleciona todos Ns. product, ns. month, ns. amount, ns. rn, ns. k (ns. amount - es. x) es. xx de rns ns, res s onde ns. rn es. rn 1 e ns. product es. produto) selecione o produto, mês, quantidade, rn, rodada (x, 3) EMA a partir de pedido de res por produto, mês após a computação do formulário fechado, surgi com o código a seguir que, se mais parecido com uma ofuscação do que qualquer coisa abrangente. A idéia é criar múltiplos em execução usando uma concatenação de string e a funcionalidade xml-eval. As formas fechadas dos casos especiais apenas precisam de somas correntes. Há um caso geral e dois casos especiais que são muito mais fáceis: com t1 como (selecionar produto, mês, quantidade, quantidade ci, rownumber () over (partição por ordem do produto por mês) rn, --2 (1 rownumber () over (Partição por ordem de produto por mês)) ki 0,5 ki de vendas), t2 como (selecione produto, mês, quantidade, (caso quando rn 1 e 1 mais ki end ci) ai, caso quando rn 1 e mais 1 (1 - Ki) end bi a partir de t1), t3 como (SELECIONE o produto, MONTH, amount, ai, xmlquery (REPLACE (wmconcat (bi) over (PARTITION BY product ORDEM POR MONTH linhas entre INCLINADO precedente AND ACTUAL), 39,39, 3939 ) VOLTANDO o conteúdo).getnumberval () mi FROM t2), t4 as (selecione o produto, o mês, o montante, o mi) xi do t3) SELECIONE o produto, MONTH, amount, round (mi SUM (xi) over (PARTITION POR produto ORDER BY MONTH filas ENTRE INCLINADO ANTERIOR E LIGAÇÃO ATUAL), 3) ema FROM t4 Caso especial K 0.5: com t1 como (selecionar produto, mês, quantidade, rownumber () sobre (partição por ordem do produto por mês) rn, quantidade Poder (2, nvl (nullif (r (Partição por ordem de produto por mês) - 1, 0), 1)) ci de vendas) selecione produto, mês, quantidade, rodada (soma (ci) sobre (partição por ordem de produto por mês linhas entre ilimitado anterior E linha atual) potência (2, rn), 3) ema de t1 Caso especial K 2 (1 i): com t1 como (selecionar produto, mês, quantidade, rownumber () over (partição por produto ordem por mês) rn, Quantidade de rownumber () por cima (partição por ordem de produto por mês) ci de vendas) selecione produto, mês, quantidade, rodada (soma (ci) sobre (partição por ordem de produto por mês linhas entre linha não limitada precedente e atual) 2 (rn ( Rn 1)), 3) ema de t1 I39ll publicar a prova do formulário fechado se alguém estiver interessado nela. Este é um ótimo exemplo de quotfun com SQLquot :-) Uma combinação de XMLQuery, wmconcat indocumentado e funções analíticas com a cláusula de janela. Eu gosto disso. Embora não seja tão abrangente como a variante da cláusula modelo e os Rafu39s recursivos com um, como você disse a si mesmo. E com certeza, gostaria de ver a prova da forma fechada. Abordei outra questão: como otimizar a constante de suavização SELECT k - suavização constante. Mse - erro quadrado médio FROM (SELECCIONAR DE VENDA MODELO DIMENSÃO POR (produto. ROWNUMBER () OVER (PARTITION BY product ORDER BY month ASC) rn) MEDIDAS (montante - valor das vendas mês a mês 0 COMO C. 0 AS P. 0 AS X. 0 AS SE - erro ao quadrado - - linha de trabalho e atributos - a) linha de trabalho é o produto 39X39, rn 1 - b) os atributos de trabalho são os seguintes:. 0 AS SSE - sum SE para todos os meses de produtos. 0 AS MSE - significa SSE para todos os produtos. 0 AS k - para todos os meses de produtos. 0 AS PreMSE - MSE anterior de k39s para todos os produtos. 0 AS diff - entre MSE atual e anterior. 0,1 AS delta - incremento inicial. 0 AS priorpt - ponto de partida inicial -) REGRAS ITERATE (99) ATÉ (abs (diff39A39,1) lt 0.00010) (Cany, rn amountcv (), cv (). K39A39,1 priorpt39A39,1 delta39A39,1. Xany Rn ORDEM POR produto, rn ASC COALESCE (K39A39,1 Ccv (), cv () (1-K39A39,1) Xcv (), cv () - 1, Ccv (), cv ()). Pproduct, rn Xcv (), Cv () - 1. SEproduct, rn POWER (Ccv (), cv () - Xcv (), cv () - 1, 2). SSE39A39,1 SUM (SE) qualquer, qualquer. MSE39A39,1 SUM (SE) qualquer, qualquer 24. Diff39A39,1 CASE iterationnumber QUANDO 0 então NULL ELSE preMSE39A39,1 - MSE39A39,1 END. PreMSE39A39,1 MSE39A39,1. Delta39A39,1 CASO QUANDO diff39A39,1 lt 0 então - abs (delta39A39, 12) ELSE abs (delta39A39,1) END. Prioritypt39A39,1 K39A39,1)) onde o produto 39A39 e rn 1 K MSE ---------- ---------- .599999237 174.016094

No comments:

Post a Comment