Friday 13 January 2017

T Sql Déplacement Moyenne Fonction

Im essayer de calculer une moyenne mobile de 3 mois regroupés par région et mois, comme en note que le mois est élargi à des fins illustratives, Id vraiment attendre la sortie de dire un seul mois. Maintenant, je peux le faire en créant un regroupement CTE par région et par mois, puis rejoindre à un couple fois comme ça, c'est laid, imaginez si vous aviez à faire une moyenne mobile de 6 mois ou moyenne mobile de 12 mois Im essayez d'utiliser le t - Sql 2012 fonctions analytiques, en particulier l'option RANGE. Ive utilisé ROWS avant avant, mais jamais de portée. Ce que j'ai essayé, mais j'ai une erreur de syntaxe: Msg 8120, niveau 16, état 1, ligne 2 Colonne dbo. vwscorebyregion. month n'est pas valide dans la liste de sélection, car il n'est pas contenu dans une fonction agrégat ou la clause GROUP BY. Clairement, je fais quelque chose de stupide, mais je ne sais pas quoi. A demandé Mar 23 13 at 7:54 marcs 465k 9679 95 9679 892 9679 1061 vous devez quotmovequot ce groupe par dans la fonction de fenêtre: avg (var) plus (partition par région oder par.) Ndash ahorsewithnoname Mar 23 13 at 8:41 Tout d'abord, RANGE n'est pris en charge qu'avec des délimiteurs de trames UNBOUNDED et CURRENT ROW, il ne peut pas être utilisé avec N PRECEDING ou N FOLLOWING. À partir de votre titre, on dirait que vous voulez obtenir 3 mois de glissement avg (glissement avg), puis youd mieux à utiliser ROWS Utilisation ROWS (C'est plus probable ce dont vous avez besoin) SQl Fiddle Demo Remarque: Utilisation de RANGE: Pour contrôler la largeur de partition, puisque vous voulez agg par 3 mois, et la gamme ne supporte pas N PRECEDING et N SUIVANT. Il ne prend en charge que les suivantes: Répondue Mar 23 13 à 9: 39Weighted moyenne mobile 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 tableaux réels au lieu de CTE8217s: Performances 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éta-options utilisées 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 récents des prix 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 chez High Coast Database Solutions AB.


No comments:

Post a Comment