Thursday 16 November 2017

Gleitende Durchschnittliche Mysql


Wenn ich ein ähnliches Problem hatte, landete ich mit Temp-Tabellen für eine Vielzahl von Gründen, aber es machte dies viel einfacher Was ich sah sehr ähnlich, was youre tun, soweit das Schema geht. Machen Sie das Schema so etwas wie ID identity, startdate, enddate, value. Wenn Sie auswählen, führen Sie einen Subselect-Durchschnitt der vorherigen 20 basierend auf der Identitäts-ID aus. Nur tun, wenn Sie sich bereits mit Temp-Tabellen aus anderen Gründen aber (Ich traf die gleichen Zeilen immer und immer für verschiedene Metriken, so war es hilfreich, die kleinen Dataset haben). Nach meiner Erfahrung tendiert Mysql ab 5.5.x nicht dazu, Indizes auf abhängige selects, ob eine Unterabfrage oder join, zu verwenden. Dies kann eine erhebliche Auswirkung auf die Leistung haben, wenn sich die abhängigen Auswahlkriterien bei jeder Zeile ändern. Der gleitende Durchschnitt ist ein Beispiel für eine Abfrage, die in diese Kategorie fällt. Die Ausführungszeit kann mit dem Quadrat der Zeilen ansteigen. Um dies zu vermeiden, wählen Sie eine Datenbank-Engine, die indizierte Lookups auf abhängige selects durchführen können. Ich finde postgres wirkt effektiv für dieses Problem. Beantwortet Antwort # 1 am: August 14, 2010, 10:03:01 pm »Antwort: 2017 Stack Exchange, IncVerzüglich haben wir diskutiert, wie man rollende Durchschnitte in Postgres schreiben. Durch die populäre Nachfrage zeigten Ihnen, wie das gleiche in MySQL und SQL Server zu tun. Nun zu decken, wie kommentieren laute Charts wie folgt: Mit einem 7-Tage vorherigen durchschnittlichen Linie wie folgt: Die große Idee Unsere erste Grafik oben ist ziemlich laut und schwer, nützliche Informationen zu erhalten. Wir können es glätten, indem wir einen 7-Tage-Durchschnitt auf die zugrundeliegenden Daten zeichnen. Dies kann durch Fensterfunktionen, Self-Joins oder korrelierte Unterabfragen erfolgen - decken die ersten beiden ab. Nun beginnen mit einem vorangegangenen Durchschnitt, was bedeutet, dass der durchschnittliche Punkt am 7. des Monats der Durchschnitt der ersten sieben Tage ist. Optisch verschiebt sich die Spitze im Graphen nach rechts, da eine große Spitze über die nächsten sieben Tage gemittelt wird. Erstens eine Zwischenzahltabelle erstellen Wir wollen einen Durchschnittswert über die gesamten Anmeldungen für jeden Tag berechnen. Angenommen, wir haben eine typische Benutzer-Tabelle mit einer Zeile pro neuen Benutzer und einem Zeitstempel erstellt, können wir unsere aggregate unsere Signups-Tabelle wie folgt erstellen: In Postgres und SQL Server können Sie diese als CTE verwenden. In MySQL können Sie sie als temporäre Tabelle speichern. Postgres Rolling Average Glücklicherweise hat Postgres Fenster-Funktionen, die der einfachste Weg, um einen laufenden Durchschnitt zu berechnen sind. Diese Abfrage setzt voraus, dass die Daten keine Lücken aufweisen. Die Abfrage ist Mittelung über die letzten sieben Zeilen, nicht die letzten sieben Termine. Wenn Ihre Daten Lücken aufweisen, füllen Sie sie mit generateseries oder Beitritt gegen eine Tabelle mit dichten Datumszeilen. MySQL Rolling Average MySQL fehlt Fenster-Funktionen, aber wir können eine ähnliche Berechnung mit Self-Joins zu tun. Für jede Zeile in unserem Zählungstabelle verbinden wir jede Zeile, die innerhalb der letzten sieben Tage war, und nehmen den Durchschnitt. Diese Abfrage behandelt automatisch Datumslücken, da wir Zeilen innerhalb eines Datumsbereichs anstelle der vorhergehenden N Zeilen betrachten. SQL Server Rolling Average SQL Server verfügt über Fensterfunktionen, so dass die Berechnung der rollenden Durchschnitt kann entweder in der Postgres-Stil oder MySQL-Stil erfolgen. Zur Vereinfachung wurden die MySQL-Version mit einem Self-Join. Dies ist konzeptionell das gleiche wie in MySQL. Die einzigen Übersetzungen sind die dateadd Funktion und explizit benannt Gruppe nach Spalten. Andere Mittelwerte Wir konzentrierten uns auf den 7-tägigen nachlaufenden Durchschnitt in diesem Beitrag. Wenn wir uns den 7-Tage-Leitdurchschnitt anschauen wollten, so einfach wie die Daten in die andere Richtung sortieren. Postgres: Zeilen zwischen 3 vorherigen und 3 folgenden MySql: zwischen signups. date - 3 und signups. date 3 in MySQL SQL Server: zwischen dateadd (Tag, -3, signups. Datum) und dateadd (Tag, 3, signups. date) MySQL Foren. PHP. Guten Tag Menschen, Ich bin an der Schaffung eines Simple Moving Average (SMA) mit nur SQL interessiert. Ein SMA ist relativ einfach zu berechnen und wird zum Glätten numerischer Daten verwendet. Beispiel: Die SMA von 5 Tagen für heute wäre der Durchschnitt der letzten 5 Tage. Die SMA von morgen ist der Durchschnitt der 5 Tage davor. Weitere Informationen über SMA finden Sie unter SAM. Nun - sicher, ich könnte PHPmySQL verwenden, um solche SMA-Werte zu pruduzieren, aber ich denke, mit nur SQL für diese Aufgabe wird schneller (bin ich rechts) und sicher eleganter, aber ich bin eher aus Ideen, wie dies zu tun, da die SMA, wie Der Name zeigt an, bewegt sich von Wert zu Wert und berechnet die SMA entsprechend ihren vorhergehenden aufeinanderfolgenden Werten. Der Algorithmus arbeitet wie folgt: 1. Wenn Sie zB den Faktor 5 Tage zum Glätten verwenden, beginnen Sie mit dem Datum, das 5 Tage vor dem ältesten Datum in der Tabelle liegt. 2. Erstellen Sie den Durchschnitt der letzten 5 Tage. 3. den berechneten Wert speichern. 4. gehen Sie zum nächsten Tag. 5. gehen Sie zurück zu Punkt Nummer 2 oder stoppen, wenn erreicht Ende der Tabelle. Könnten Sie mir bitte einen Hinweis geben. Ich würde sehr glücklich sein, Ihre Gedanken zu diesem zu hören. Achten Sie darauf, und halten Sie die gute Arbeit Dekers

No comments:

Post a Comment