Thursday 19 January 2017

Moving Average In Sql Server 2008

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 den 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. Ich versuche, eine laufende durchschnittliche Spalte in der SELECT-Anweisung basierend auf einer Spalte aus der n früheren Zeilen in der gleichen SELECT-Anweisung haben. Der Durchschnitt, den ich brauche, basiert auf den n vorherigen Zeilen im Resultset. Die ersten 3 Zeilen der Spalte Average sind Null, da es keine vorherigen Zeilen gibt. Die Zeile 4 in der Spalte Mittel zeigt den Durchschnitt der Spalte Nummer aus den vorherigen 3 Zeilen an. Ich brauche etwas Hilfe versuchen, eine SQL-Select-Anweisung, die dies tun wird. Eine einfache Selbstverknüpfung scheint, viel besser als eine Zeile zu tun, die auf Unterabfrage verweist. Generiere 10k Zeilen von Testdaten: Ich würde den Spezialfall der ersten 3 Zeilen aus der Hauptabfrage herausziehen, Sie können UNION ALLE zurück in wenn Sie wirklich wollen Es in der Zeile gesetzt. Selbstverknüpfung Abfrage: Auf meiner Maschine dauert dies etwa 10 Sekunden, die Unterabfrage Ansatz, dass Aaron Alton demonstriert dauert etwa 45 Sekunden (nachdem ich es geändert, um meine Test-Source-Tabelle widerspiegeln): Wenn Sie ein SET STATISTICS PROFIL ON tun, können Sie die Self join hat 10k auf der Tischspule ausgeführt. Die Unterabfrage hat 10k Ausführungen auf dem Filter, Aggregat und andere Schritte.


No comments:

Post a Comment