Sunday 19 November 2017

Moving Average Sql Server


Ich arbeite mit SQL Server 2008 R2 und versuche, einen gleitenden Durchschnitt zu berechnen. Für jeden Datensatz meiner Ansicht möchte ich die Werte der 250 vorherigen Datensätze sammeln und dann den Durchschnitt für diese Selektion berechnen. Meine Ansichtsspalten sind wie folgt: TransactionID ist eindeutig. Für jede TransactionID. Ich möchte den Durchschnitt für Spaltenwert über 250 Datensätze berechnen. So für die TransactionID 300, sammeln Sie alle Werte aus früheren 250 Zeilen (Ansicht wird absteigend nach TransactionID sortiert) und dann in Spalte MovAvg das Ergebnis des Mittelwerts dieser Werte schreiben. Ich bin auf der Suche, um Daten in einer Reihe von Datensätzen zu sammeln. TD-SQL-Code, um einen bewegenden Durchschnitt zu berechnen Von: Dallas Snider Lesen Sie Kommentare Verwandte Tipps: Weitere Funktionen - Benutzerdefinierte UDF Wie kann ich die Daten in einer Spalte mit einem gleitenden Durchschnitt in T-SQL glätten Können Sie bitte durch ein Beispiel in SQL Server mit T-SQL-Code gehen Wie können wir die Ergebnisse validieren Zeitreihe Daten können von Natur aus laut und ein guter Weg, um die Daten zu glätten ist ein gleitender Durchschnitt zu berechnen. Es gibt eine Reihe von Möglichkeiten, um einen gleitenden Durchschnitt in T-SQL zu berechnen, aber in diesem Tipp werden wir uns einen Weg ansehen, um einen gleitenden Durchschnitt zu berechnen, der das Mittelungsfenster x Anzahl der Zeilen hinter und x Zahl der Zeilen vor dem aktuellen Wert festlegt Datenzeile. Der Vorteil ist, dass es keine Verzögerung in den durchschnittlichen Wert zurückgegeben und der gleitende Mittelwert ist auf der gleichen Zeile mit seinem aktuellen Wert. Beginnen wir mit dem Erstellen einer Tabelle und dem Laden einiger Daten mit dem T-SQL unten. Wir haben 361 Datenpunkte, die eine verrauschte Sinuswelle erzeugen. Nach dem Laden der Daten führen wir den folgenden T-SQL-Code aus, um alle Spalten zusammen mit dem gleitenden Mittelwert auszuwählen. Im folgenden Code ist die gleitende durchschnittliche Fenstergröße 15 (7 Zeilen vor der aktuellen Zeile plus der aktuellen Zeile plus 7 Zeilen). Der gleitende Durchschnitt der Spalte DataValue wird als Spalte MovingAverageWindowSize15 zurückgegeben. Die ORDER BY-Klausel ist extrem wichtig, um die Daten in der richtigen Reihenfolge zu halten. Wir können die Ergebnisse kopieren und in Excel einfügen, um die Berechnung zu überprüfen. Im Bild unten beginnt das Fenster in Zelle C3 und endet bei C17. Der gleitende Durchschnitt, der von dem T-SQL in diesem Tipp berechnet wird, erscheint in Zelle D10. Der von Excel berechnete Durchschnitt ist am unteren Rand und er ist gleich dem Wert in D10. In der folgenden Abbildung sehen wir die ursprünglichen Datenwerte in blau mit dem gleitenden Durchschnitt in Rot aufgetragen. Nächste Schritte Passen Sie die Größe des gleitenden Durchschnittsfensters an, um zu sehen, wie sich das Diagramm ändert. Auch sollten Sie sich diese anderen Tipps auf T-SQL aus mssqltips: Letztes Update: 382016Dies 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 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. Beantwortet Joe Celkos dirty linken äußeren Join-Methode (wie zitiert von Diego Scaravaggi) auf die Frage zu beantworten, wie es gefragt wurde. Erstellt die angeforderte Ausgabe: answered Jan 9 16 at 0:33 Deine Antwort 2017 Stack Exchange, Inc

No comments:

Post a Comment