Sunday, January 1, 2017

Moving Average In Sql Server

Auparavant, nous avons discuté de la façon d'écrire des moyennes mobiles dans Postgres. Par la demande populaire ont été vous montrer comment faire la même chose dans MySQL et SQL Server. Eh bien couvrir comment annoter des graphiques bruyants comme ceci: Avec une moyenne 7 jours précédant la ligne comme ceci: La grande idée Notre premier graphique ci-dessus est assez bruyant et difficile d'obtenir des informations utiles à partir. Nous pouvons le lisser en traçant une moyenne sur 7 jours en plus des données sous-jacentes. Cela peut être fait avec des fonctions de fenêtre, auto-joint, ou sous-requêtes corrélées - bien couvrir les deux premiers. Bien commencer par une moyenne précédente, ce qui signifie que le point moyen le 7 du mois est la moyenne des sept premiers jours. Visuellement, cela déplace les pointes dans le graphique vers la droite, car un gros pic est calculé sur les sept jours suivants. Tout d'abord, créer un tableau de comptage intermédiaire Nous voulons calculer une moyenne sur le total des inscriptions pour chaque jour. En supposant que nous avons une table d'utilisateurs typique avec une ligne par nouvel utilisateur et un timestamp createdat, nous pouvons créer notre agréger notre table d'inscriptions comme ceci: Dans Postgres et SQL Server, vous pouvez utiliser cela comme un CTE. Dans MySQL vous pouvez l'enregistrer comme une table temporaire. Postgres Rolling Average Heureusement Postgres a des fonctions de fenêtre qui sont la façon la plus simple de calculer une moyenne courante. Cette requête suppose que les dates n'ont pas de lacunes. La requête est une moyenne sur les sept dernières lignes, pas les sept dernières dates. Si vos données présentent des lacunes, complétez-les en générant des séries ou en vous joignant à une table avec des lignes de date denses. MySQL Rolling Average MySQL manque de fonctions de fenêtre, mais nous pouvons faire un calcul similaire à l'aide d'auto-jointures. Pour chaque rangée de notre table de dénombrement, nous joignons chaque ligne qui était dans les sept derniers jours et prendre la moyenne. Cette requête gère automatiquement les intervalles de date, car nous examinons les lignes dans une période plutôt que les N lignes précédentes. SQL Server Rolling SQL Server moyenne a des fonctions de fenêtre, de sorte que le calcul de la moyenne mobile peut être fait dans le style Postgres ou MySQL style. Pour simplifier, utilisaient la version MySQL avec une jointure automatique. C'est conceptuellement le même que dans MySQL. Les seules traductions sont la fonction dateadd et explicitement nommées groupe par colonnes. Autres moyennes Nous nous sommes concentrés sur la moyenne à la baisse de sept jours dans ce poste. Si nous voulions regarder la moyenne de 7 jours, c'est aussi simple que de trier les dates dans l'autre sens. Si on voulait regarder une moyenne centrée, wed use: Postgres: lignes entre 3 précédent et 3 suivant MySql: entre signups. date - 3 et signups. date 3 dans MySQL SQL Server: entre dateadd (jour, -3, signups. Date) et dateadd (jour, 3, signups. date) 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. A demandé Oct 28 14 at 20:58


No comments:

Post a Comment