Il s'agit d'une question Evergreen Joe Celko. J'ignore quelle plate-forme DBMS est utilisée. Mais dans tous les cas Joe a réussi à répondre il ya plus de 10 ans avec SQL standard. Joe Celko SQL Puzzles et Réponses citation: Cette dernière tentative de mise à jour suggère que nous pourrions utiliser le prédicat pour construire une requête qui nous donnerait une moyenne mobile: La colonne supplémentaire ou l'approche de requête mieux La requête est techniquement mieux parce que l'approche UPDATE sera Dénormaliser la base de données. Toutefois, si les données historiques enregistrées ne vont pas changer et que le calcul de la moyenne mobile est coûteux, vous pouvez envisager d'utiliser l'approche par colonne. SQL requête Puzzle: par tous les moyens uniformes. Vous venez de jeter au godet de poids approprié en fonction de la distance du point de temps actuel. Par exemple quottake weight1 pour datapoints dans 24 heures à partir du point de données actuel weight0.5 pour datapoints dans 48hrsquot. Dans ce cas, il importe combien de points de données consécutifs (comme 6:12 am et 11:48 pm) sont distants les uns des autres Un cas d'utilisation, je peux penser serait une tentative de lisser l'histogramme partout où datapoints ne sont pas denses assez ndash msciwoj May 27 15 at 22:22 Je ne suis pas sûr que votre résultat attendu (sortie) montre classique simple déplacer (rolling) moyenne pour 3 jours. Parce que, par exemple, le premier triple de nombres par définition donne: mais vous attendez 4.360 et sa confusion. Néanmoins, je suggère la solution suivante, qui utilise la fonction de fenêtre AVG. Cette approche est beaucoup plus efficace (claire et moins intensive en ressources) que SELF-JOIN introduit dans d'autres réponses (et Im surpris que personne n'a donné une meilleure solution). Vous voyez que AVG est enveloppé avec le cas lorsque rownum gt p. days puis à forcer NULL s dans les premières lignes, où 3 jours Moyenne mobile est vide de sens. Répondue 23 fév à 13:12 Nous pouvons appliquer Joe Celkos sale méthode de jointure extérieure gauche (comme cité ci-dessus par Diego Scaravaggi) pour répondre à la question telle qu'elle a été posée. Dans mon récent entretien à Surge et Percona Live sur la détection de défauts adaptatifs (diapositives), j'ai affirmé que les seuils codés en dur pour alerter sur les conditions d'erreur sont généralement les meilleurs pour éviter En faveur de seuils dynamiques ou adaptatifs. (Je suis allé beaucoup plus loin que cela et a dit qu'il est possible de détecter les défauts avec une grande confiance dans de nombreux systèmes comme MySQL, sans fixer de seuils à tous.) Dans ce post je veux expliquer un peu plus sur les moyennes mobiles que j'ai utilisé pour Déterminer le comportement normal dans les exemples que j'ai donnés. Il ya deux candidats évidents pour les moyennes mobiles: simples moyennes mobiles et exponentiellement pondéré des moyennes mobiles. Une moyenne mobile directe suffit à calculer la moyenne (moyenne) sur les N derniers échantillons de données. Dans mon cas, j'ai utilisé 60 échantillons. Cela nécessite de conserver un tableau des N échantillons précédents et de mettre à jour la moyenne pour chaque échantillon. Une moyenne mobile exponentielle ne nécessite pas de garder des échantillons. La moyenne est un nombre unique et vous avez un soi-disant facteur de lissage. Pour chaque nouvel échantillon, vous multipliez l'ancienne moyenne par 1 et ajoutez-la aux nouveaux temps d'échantillonnage: avg: (1-alpha) avg alphasample. Les deux techniques ont leurs inconvénients. Les deux nécessitent une période de préchauffage, par exemple. Évidemment, dans le cas d'une fenêtre de 60 échantillons de déplacement, vous avez besoin de 60 échantillons avant de pouvoir commencer. La moyenne mobile exponentielle peut être amorcée à partir de la moyenne des 10 premiers échantillons, selon mon expérience. Les deux techniques retardent également la tendance dans les échantillons dans une certaine mesure. Quand il ya un changement dramatique dans le modèle, ils prennent un certain temps pour rattraper le retard. Voici un complot de quelques données réelles et les deux techniques. Cliquez pour voir une image plus grande. La ligne bleue représente les données échantillonnées, la ligne rouge est une moyenne mobile exponentielle avec une mémoire moyenne de 60 secondes et la ligne jaune est une moyenne mobile de 60 secondes. Remarquez comment la ligne rouge tend à se corriger plus rapidement et à rester plus fidèle au comportement actuel de la ligne bleue. C'est un avantage de la moyenne mobile exponentielle si c'est ce que vous désirez. Il n'est pas évident dans ces données, mais la moyenne mobile simple a un autre inconvénient. Supposons qu'il y ait un pic de valeurs très élevées dans les données échantillonnées pendant quelques secondes. Pour les prochaines 60 secondes, cette pointe va être dans la fenêtre, gonfler la moyenne mobile. Lorsqu'il est éliminé de la fenêtre, il provoque la baisse de la moyenne mobile soudainement. J'ai trouvé cela problématique dans plusieurs cas. C'est particulièrement évident lorsque vous calculez l'écart-type des échantillons (ou d'autres statistiques sensibles) sur la fenêtre en mouvement. La moyenne mobile exponentielle n'a pas ce problème parce que ce pic ne sort jamais de la fenêtre. Son influence est là pour toujours, mais avec le temps, elle devient progressivement plus petite, de façon lisse. Donc, vous n'avez pas de pics brusques dans la moyenne actuelle basée sur ce qui s'est passé il ya 60 secondes. C'est juste rayer la surface des techniques Ive exploré sur un grand ensemble de jours à semaines de données de dizaines de milliers de serveurs réels. Comme j'obtiens le temps, Ill essayer d'écrire plus à ce sujet dans l'avenir.
No comments:
Post a Comment