Friday, February 10, 2017

Calculate Moving Average In Sql Server

Je travaille avec SQL Server 2008 R2, en essayant de calculer une moyenne mobile. Pour chaque enregistrement à mon avis, je voudrais collecter les valeurs des 250 enregistrements précédents, puis calculer la moyenne pour cette sélection. Mes colonnes de vue sont comme suit: TransactionID est unique. Pour chaque TransactionID. Je voudrais calculer la moyenne pour la valeur de la colonne, au cours des 250 derniers enregistrements. Donc, pour TransactionID 300, collecter toutes les valeurs des 250 lignes précédentes (affichage est trié en descendant par TransactionID) et puis dans la colonne MovAvg écrire le résultat de la moyenne de ces valeurs. Je cherche à recueillir des données dans une gamme d'enregistrements. 28 oct. 20 à 20: 58 Moyenne mobile pondérée dans T-SQL Dans un post antérieur, j'ai démontré le calcul des moyennes mobiles dans T-SQL. Cependant, il ya un inconvénient majeur avec des moyennes mobiles simples. Les variations de prix au début de la période ont la même importance que les changements de prix plus récents. D'une certaine manière, vous aimeriez attribuer des poids différents aux changements de prix, de sorte que les changements les plus récents obtiennent le plus de poids. À cette fin, une moyenne mobile pondérée (WMA) peut être calculée. Dans ce billet de blog je vais montrer deux méthodes différentes pour calculer WMA, qui peut être utilisé sur SQL Server 2005 et plus tard, et l'autre version est pour SQL Server versions antérieures à 2005. Pour calculer le poids relatif de chaque changement de prix, nous Besoin de connaître la position de chaque changement de prix par rapport au jour calculé. Pour cette raison, une fonction de fenêtre ne peut pas être utilisée. Il n'est pas possible d'obtenir des informations à partir des différentes lignes dans la fenêtre. Dans l'exemple ci-dessous, nous calculons la moyenne mobile pondérée pour 9 jours (WMA9). L'exemple utilise le TAdb. Un script pour créer TAdb peut être trouvé ici. Indépendamment de la version de SQL Server, pour chaque ligne nous devons accéder aux 8 lignes précédentes, 9 avec la ligne courante incluse. Ces 9 lignes seront la fenêtre qui contient nos changements de prix. Chaque ligne dans cette fenêtre se verra attribuer un poids linéaire qui augmente avec la même quantité pour chaque rangée jusqu'à la ligne courante. Le poids de chaque ligne sera calculé en utilisant la position de la ligne de fenêtre par rapport à la ligne en cours. Let8217s dire que nous voulons calculer WMA pour la 9 ème ligne (citations de TAdb StockId 1): 1 30,02 30,02 2 30,33 60,66 3 30,33 90,99 4 30,44 121,76 5 30,24 151,20 6 30,27 181,62 7 29,87 209,09 8 30,00 240,00 9 30,02 270,18 La somme de ce qui précède est de 1355,52. Ceci est alors divisé par la somme des poids, c'est-à-dire 123456789 45. Le WMA9 pour la rangée 9 est 1355,52 45 30,12. Si vous voulez calculer WMA autre que pendant 9 jours, utilisez le T-SQL suivant (obtenez la fonction GetNums2 ici) pour obtenir le diviseur pour la longueur de période (par exemple 45 pour 9 jours WMA): Diviseurs de moyenne mobile pondérée (WMA) Moyenne mobile pondérée SQL Server 2005 et versions ultérieures Cette version utilise un CTE pour calculer le WMA: Résultat pour 9 jours Moyenne mobile pondérée (WMA9) Dans les résultats ci-dessus, vous pouvez voir le WMA9 pour la ligne 9 est 30,12, comme calculé précédemment. Moyenne mobile pondérée avant SQL Server 2005 La seule différence entre la version SQL Server 2005 et celle-ci est l'utilisation d'une expression de table commune. La version antérieure à 2005 utilise des tables réelles au lieu de CTE8217s: Performance Lors du calcul d'une moyenne mobile simple et à l'aide de SQL Server 2012 ou ultérieur, une amélioration considérable de la performance peut être observée lors de l'utilisation des fonctions de fenêtre par rapport aux métropolitains utilisés dans les anciennes versions de SQL Server . Cependant, les calculs des moyennes mobiles pondérées peuvent utiliser les fonctions de fenêtrage de la même manière. Une comparaison entre la version SQL Server 2005 de WMA montre une légère amélioration par rapport aux versions utilisées dans les anciennes versions de SQL Server: T-SQL WMA SQL Server 2005 par rapport à la version antérieure à 2005. En raison des calculs coûteux impliqués dans WMA, il pourrait être une bonne idée de persister les résultats. WMA sont utilisés de la même manière que SMA, dans l'analyse des tendances. WMA a plus de poids sur les changements de prix récents cependant. Ce billet de blog fait partie d'une série sur l'analyse technique, TA, dans SQL Server. Voir les autres messages ici. Publié par Tomas Lind Tomas Lind - Services de conseil en tant que SQL Server DBA et développeur de bases de données à haute Côte Solutions de bases de données AB. SQL Server T-SQL Code pour calculer une moyenne mobile Par: Dallas Snider Lire les commentaires Related Tips: Plus de fonctions - UDF User Defined How Puis-je lisser les données dans une colonne avec une moyenne mobile dans T-SQL Pouvez-vous s'il vous plaît passer à travers un exemple dans SQL Server avec le code T-SQL Comment pouvons-nous valider les résultats Les séries chronologiques données peuvent être intrinsèquement bruyant et un bon moyen de Lisser les données est de calculer une moyenne mobile. Il ya plusieurs façons de calculer une moyenne mobile dans T-SQL, mais dans cette astuce nous allons regarder un moyen de calculer une moyenne mobile qui définit la fenêtre de moyenne x nombre de lignes derrière et x nombre de lignes avant le courant Ligne de données. L'avantage de ceci est qu'il n'y a pas de décalage dans la valeur moyenne renvoyée et la valeur de la moyenne mobile est sur la même rangée avec sa valeur actuelle. Commençons par créer une table et charger certaines données à l'aide du T-SQL ci-dessous. Nous avons 361 points de données qui créent une onde sinusoïdale bruyante. Après le chargement des données, nous allons exécuter le code T-SQL suivant pour sélectionner toutes les colonnes ainsi que la valeur de la moyenne mobile. Dans le code ci-dessous, la taille de la fenêtre de la moyenne mobile est 15 (7 lignes précédant la ligne courante, plus la ligne courante, plus les 7 lignes suivantes). La moyenne mobile de la colonne DataValue est renvoyée en tant que colonne MovingAverageWindowSize15. La clause ORDER BY est extrêmement importante pour conserver les données dans l'ordre trié approprié. Nous pouvons copier et coller les résultats dans Excel pour valider le calcul est correct. Dans l'image ci-dessous, la fenêtre commence dans la cellule C3 et se termine à C17. La moyenne mobile calculée par le T-SQL dans cette astuce apparaît dans la cellule D10. La moyenne calculée par Excel est en bas et elle est égale à la valeur en D10. Dans la figure ci-dessous, nous pouvons voir les valeurs des données originales représentées en bleu avec la moyenne mobile affichée en rouge. Prochaines étapes Ajustez la taille de la fenêtre de la moyenne mobile pour voir comment le graphique change. Aussi, n'oubliez pas de consulter ces autres conseils sur T-SQL à partir de mssqltips: Dernière mise à jour: 382016


No comments:

Post a Comment