Saturday 22 July 2017

Moving Average In Sql


Ich arbeite mit SQL Server 2008 R2 und versuche, einen gleitenden Durchschnitt zu berechnen Für jeden Datensatz in meiner Ansicht möchte ich die Werte der 250 vorherigen Datensätze sammeln und dann den Durchschnitt für diese Auswahl berechnen. Meine Ansichtspalten sind wie folgt. TransactionID ist eindeutig Für jede TransactionID möchte ich den Durchschnitt für Spaltenwert berechnen, über vorherige 250 Datensätze Also für TransactionID 300 sammle alle Werte aus vorherigen 250 Zeilen Ansicht sortiert absteigend von TransactionID und dann in Spalte MovAvg das Ergebnis der Durchschnitt dieser Werte Ich bin auf der Suche nach Daten in einer Reihe von Datensätzen zu sammeln 28. Oktober 14 bei 20 58.Vorhin diskutierten wir, wie zu schreiben rollenden Durchschnitte in Postgres Von beliebten Nachfrage zeigen wir Ihnen, wie man das gleiche in MySQL und SQL zu tun Server. Wir decken, wie zu kommentieren laute Charts wie this. With eine 7-Tage-Vor-durchschnittliche Zeile wie this. The Big Idea. Our erste Grafik oben ist ziemlich laut und schwer zu nützlichen Informationen von Wir können es glätten durch p Einen 7-tägigen Durchschnitt über den zugrunde liegenden Daten ausgeben Dies kann mit Fensterfunktionen, Selbstverknüpfungen oder korrelierten Unterabfragen erfolgen - wir decken die ersten beiden ab. Wir beginnen mit einem vorangegangenen Durchschnitt, was bedeutet, dass der durchschnittliche Punkt auf Der 7. des Monats ist der Durchschnitt der ersten sieben Tage. Normalerweise verschiebt sich die Spikes in der Grafik nach rechts, da eine große Spitze in den folgenden sieben Tagen gemittelt wird. Zuerst erstellen Sie eine Zwischenzählertabelle. Wir wollen berechnen Ein Durchschnitt über die gesamten Anmeldungen für jeden Tag Angenommen, wir haben eine typische Benutzer-Tabelle mit einer Zeile pro neuen Benutzer und ein Zeitstempel erstellt, können wir unsere aggregate unsere Signatur-Tabelle wie so erstellen. In Postgres und SQL Server können Sie dies als CTE verwenden In MySQL können Sie es als temporäre Tabelle speichern. Postgres Rolling Average. Glücklicherweise hat Postgres Fensterfunktionen, die die einfachste Möglichkeit sind, einen laufenden Durchschnitt zu berechnen. Diese Abfrage geht davon aus, dass die Daten keine Lücken haben. Die Abfrage ist durchschnittlich in den letzten sieben Zeilen , Nicht die Vergangenheit Ven dateien Wenn deine Daten Lücken haben, fülle sie mit generateseries zusammen oder schließt sich gegen eine Tabelle mit dichten Datumszeilen. MySQL Rolling Average. MySQL fehlt Fensterfunktionen, aber wir können eine ähnliche Berechnung mit Selbstverknüpfungen machen Für jede Zeile in unserer Zählertabelle , Wir verbinden jede Zeile, die innerhalb der letzten sieben Tage war und nehmen Sie den Durchschnitt. Diese Abfrage automatisch behandelt Datum Lücken, da wir auf Zeilen innerhalb eines Datumsbereichs anstatt der vorherigen N Zeilen suchen. SQL Server Rolling Average. SQL Server hat Fenster Funktionen, so dass die Berechnung der rollenden Durchschnitt kann entweder in der Postgres-Stil oder MySQL-Stil durchgeführt werden. Für die Einfachheit, verwenden wir die MySQL-Version mit einem Selbst-Join. This ist konzeptionell das gleiche wie in MySQL Die einzigen Übersetzungen sind die dateadd-Funktion und explizit benannt Gruppieren nach Spalten. Weitere Mittelwerte. Wir konzentrierten uns auf den 7-tägigen nachlaufenden Durchschnitt in diesem Beitrag Wenn wir den 7-Tage-Leitwert betrachten wollten, ist es so einfach wie das Sortieren der Daten in die andere Richtung Wenn wir uns anschauen wollten Ein Zentrum Ed Durchschnitt, wir d use. Postgres Zeilen zwischen 3 vor und 3 folgenden. MySql zwischen - 3 und 3 in MySQL. SQL Server zwischen dateadd Tag, -3 und dateadd Tag, 3.This ist eine Evergreen Joe Celko Frage Ich ignoriere, welche DBMS-Plattform wird verwendet Aber auf jeden Fall Joe war in der Lage, vor mehr als 10 Jahren mit Standard SQL. Joe Celko SQL Puzzles und Answers Zitat zu beantworten Der letzte Update-Versuch schlägt vor, dass wir das Prädikat verwenden könnten, um eine Abfrage zu konstruieren, die uns einen Umzug geben würde Average. Ist die zusätzliche Spalte oder die Abfrage Ansatz besser Die Abfrage ist technisch besser, weil die UPDATE-Ansatz wird die Datenbank zu denormalisieren Allerdings, wenn die historischen Daten aufgezeichnet wird nicht zu ändern und die Berechnung der gleitenden Durchschnitt ist teuer, könnten Sie in Erwägung ziehen, die Spalte Ansatz. SQL Puzzle query. by alle bedeutet Uniform Sie nur werfen auf die entsprechende Gewicht Eimer in Abhängigkeit von der Entfernung von der aktuellen Zeitpunkt Nehmen Sie zum Beispiel Gewicht 1 für Datenpunkte innerhalb von 24 Stunden aus aktuellen Datenpunkt Gewicht 0 5 für Datenpunkte innerhalb von 48 Stunden Dieser Fall ist es wichtig, wie viel 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 zu glätten, wo Datapunkte nicht dicht genug sind msciwoj 27. Mai 15 at 22 22.Ich bin mir nicht sicher, dass deine erwartete Ergebnisausgabe klassisch einfaches Rolling Average für 3 Tage zeigt. Weil zum Beispiel das erste Triple von Zahlen per Definition gibt, aber man erwartet 4 360 und es ist verwirrend Schlagen die folgende Lösung vor, die die Fensterfunktion AVG nutzt. 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 eingewickelt wird Mit Fall, wenn rownum dann NULLs in den ersten Reihen zu zwingen, wo 3 Tage Moving Average ist bedeutungslos. answered Feb 23 16 bei 13 12.Wir können Joe Celko s schmutzig links äußere Join-Methode, wie oben von Diego Scaravaggi zitiert zu beantworten Die Frage, wie es gefragt wurde. Generates die angeforderten output. answered Jan 9 16 bei 0 33.Ihr Antwort.2017 Stack Exchange, Inc.

No comments:

Post a Comment