Wednesday 25 January 2017

Mysql Mobile Moyenne Fonction

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. 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) Forums MySQL. Débutant. Comment faire une moyenne mobile de 3 mois avec Mysql J'ai décomposé et simplifié la requête SQL à ce qui suit: SELECT b. LastDayOfMonth, (SELECT Avg (t2.SumSumNoOfDaysOpen) FROM t AS t2 WHERE t2.LastDayOfMonth Entre DATEADD (b. LastDayOfMonth, INTERVAL 3 MOIS) ET b. LastDayOfMonth) AS MovingAverageOver3Months FROM t AS b 1146 - La table sql3.b n'existe pas Voici la table table t LastDayOfMonth SumCountID SumSumNoOfDaysOpen 2003-07- 31 00:00:00 1 70 2003-08-31 00:00:00 0 0 2003-09-30 00:00:00 0 0 2003-10-31 00:00:00 0 0 2003-11-30 00 : 00: 00 2 170 2003-12-31 00:00:00 0 0 2004-01-31 00:00:00 0 0 2004-02-29 00:00:00 2 178 2004-03-31 00:00 : 00 0 0 2004-04-30 00:00:00 2 32 2004-05-31 00:00:00 0 0 2004-06-30 00:00:00 1 98 2004-07-31 00:00:00 0 0 2004-08-31 00:00:00 3 166 2004-09-30 00:00:00 5 388 2004-10-31 00:00:00 3 229 2004-11-30 00:00:00 1 72 2004-12-31 00:00:00 0 0 2005-01-31 00:00:00 2 109 2005-02-28 00:00:00 0 0 2005-03-31 00:00:00 1 126 2005- 04-30 00:00:00 2 231 2005-05-31 00:00:00 0 0 2005-06-30 00:00:00 0 0 2005-07-31 00:00:00 1 139 Note additionnelle: I Plan de remplacer Avg (t2.SumSumNoOfDaysOpen) par (sum (t2.SumSumNoOfDaysOpen)) (sum (t2.SumCountID)) une fois que je reçois cette correction.


No comments:

Post a Comment