Dies ist eine Evergreen Joe Celko Frage. Ich ignoriere, welche DBMS-Plattform verwendet wird. Aber auf jeden Fall Joe war in der Lage, mehr als 10 Jahren mit Standard-SQL zu beantworten. Joe Celko SQL-Puzzles und Antworten Zitat: Der letzte Update-Versuch deutet darauf hin, dass wir das Prädikat verwenden können, um eine Abfrage, die uns einen gleitenden Durchschnitt geben würde: Ist die zusätzliche Spalte oder die Abfrage Ansatz besser Die Abfrage ist technisch besser, weil die UPDATE-Ansatz wird Denormalisierung der Datenbank. Wenn jedoch die historischen Daten, die aufgezeichnet werden, sich nicht ändern und die Berechnung des gleitenden Durchschnitts kostspielig ist, könnten Sie die Verwendung des Spaltenansatzes in Erwägung ziehen. SQL Puzzle-Abfrage: mit allen Mitteln einheitlich. Sie werfen nur auf den entsprechenden Gewichtskorb je nach Entfernung vom aktuellen Zeitpunkt. Zum Beispiel quottake Gewicht1 für Datenpunkte innerhalb von 24 Stunden von aktuellen Datenpunkt Gewicht0,5 für Datenpunkte innerhalb von 48hrsquot. In diesem Fall ist es wichtig, wieviel aufeinander folgende Datenpunkte (wie 6:12 Uhr und 11:48 Uhr) voneinander entfernt sind. Ein Anwendungsfall, den ich mir vorstellen kann, wäre ein Versuch, das Histogramm dort zu glätten, wo Datenpunkte nicht dicht genug sind ndash msciwoj Mai 27 15 at 22:22 Im nicht sicher, dass Ihr erwarteten Ergebnis (Ausgang) zeigt klassische einfache bewegen (rolling) Durchschnitt für 3 Tage. Denn zum Beispiel gibt das erste Dreibettzimmer von Zahlen per Definition: aber man erwartet 4.360 und seine Verwirrung. Trotzdem schlage ich die folgende Lösung vor, die die Fensterfunktion AVG verwendet. Dieser Ansatz ist viel effizienter (klarer und weniger ressourcenintensiv) als SELF-JOIN in anderen Antworten eingeführt (und ich bin überrascht, dass niemand eine bessere Lösung gegeben hat). Sie sehen, dass AVG wird mit Fall verpackt, wenn rownum gt p. days dann zu zwingen, NULL s in ersten Zeilen, wo 3 Tage Moving Average ist sinnlos. Wir können Joe Celkos dirty linken äußeren Join-Methode (wie zitiert von Diego Scaravaggi) anwenden, um die Frage zu beantworten, wie es gefragt wurde. Ich habe behauptet, dass hartcodierte Schwellenwerte für die Alarmierung über Fehlerbedingungen in der Regel am besten zu vermeiden sind Zugunsten dynamischer oder adaptiver Schwellen. (Ich ging tatsächlich viel weiter als das und sagte, dass es möglich ist, Fehler mit großer Zuversicht in vielen Systemen wie MySQL, ohne Festlegung aller Schwellen zu erkennen.) In diesem Beitrag möchte ich ein wenig mehr über die gleitenden Durchschnitte für die ich verwendet zu erklären Bestimmung des normalen Verhaltens in den Beispielen I gegeben. Es gibt zwei offensichtliche Kandidaten für gleitende Mittelwerte: geradlinige gleitende Mittelwerte und exponentiell gewichtete gleitende Mittelwerte. Ein einfacher gleitender Durchschnitt berechnet lediglich den Mittelwert (Mittelwert) über die letzten N Abtastwerte der Daten. In meinem Fall habe ich 60 Proben verwendet. Dies erfordert das Halten eines Arrays der vorhergehenden N Abtastwerte und das Aktualisieren des Durchschnitts für jeden Abtastwert. Ein exponentieller gleitender Durchschnitt erfordert keine Probenhaltung. Der Durchschnitt ist eine einzelne Zahl und Sie haben einen sogenannten Glättungsfaktor. Für jede neue Probe multiplizieren Sie den alten Durchschnitt mit 1 und fügen Sie ihn dann zu den neuen Sample-Zeiten hinzu: avg: (1-alpha) avg alphasample. Beide Techniken haben ihre Nachteile. Beide erfordern eine Aufwärmperiode, zum Beispiel. Offensichtlich, im Falle eines 60-Probe-Fenster bewegen, benötigen Sie 60 Proben, bevor Sie beginnen können. Der exponentielle gleitende Durchschnitt kann aus dem Mittelwert der ersten 10 Proben, nach meiner Erfahrung, grundiert werden. Beide Techniken hingen auch in gewissem Maße von der Entwicklung der Proben ab. Wenn theres eine drastische Änderung im Muster, nehmen sie eine Weile, um aufzuholen. Heres eine Handlung von einigen realen Daten und die beiden Techniken. Klicken Sie hier, um ein größeres Bild zu sehen. Die blaue Linie ist die abgetastete Daten, die rote Linie ist ein exponentieller gleitender Durchschnitt mit einem durchschnittlichen 60-Sekunden-Speicher, und die gelbe Linie ist ein 60-Sekunden-gleitender Durchschnitt. Beachten Sie, dass die rote Linie dazu neigt, schneller zu korrigieren und dem aktuellen Verhalten der blauen Linie treuer zu bleiben. Dies ist ein Vorteil der exponentiellen gleitenden Durchschnitt, wenn das ist, was Sie wünschen. Es ist nicht in diesen Daten offensichtlich, aber der einfache gleitende Durchschnitt hat einen weiteren Nachteil. Angenommen, es gibt eine Spitze von sehr hohen Werten in den abgetasteten Daten für ein paar Sekunden. Für die nächsten 60 Sekunden wird diese Spitze innerhalb des Fensters sein und den gleitenden Durchschnitt aufblasen. Wenn es aus dem Fenster weggeworfen wird, verursacht es den gleitenden Durchschnitt plötzlich fallen. Ich habe festgestellt, dass dies in einigen Fällen problematisch sein. Sein besonders offensichtlich, wenn youre, das die Standardabweichung der Proben (oder anderer empfindlicher Statistiken) über dem bewegten Fenster berechnet. Der exponentielle gleitende Durchschnitt hat nicht dieses Problem, weil diese Spitze nie aus dem Fenster heraus bewegt. Sein Einfluss ist für immer, aber im Laufe der Zeit, wird es allmählich kleiner, in einer glatten Weise. So erhalten Sie nicht abrupt Spikes im aktuellen Durchschnitt basierend auf, was vor 60 Sekunden passiert. Dies ist nur Kratzer auf der Oberfläche der Techniken Ive erforscht auf einem großen Satz von Tagen bis Wochen von Daten von Zehntausenden von realen Servern. Wie ich Zeit bekomme, versuche ich, in Zukunft mehr darüber zu schreiben.
No comments:
Post a Comment