Tuesday 28 November 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 nach möchte ich die Werte der 250 vorherigen Aufzeichnungen sammeln und dann den Durchschnitt für diese Auswahl berechnen. Meine Ansichtspalten sind wie folgt: TransactionID ist eindeutig. Für jede TransactionID. Ich möchte den Durchschnitt für Spaltenwert berechnen, über vorherige 250 Datensätze. Also für TransactionID 300, sammle alle Werte aus vorherigen 250 Zeilen (Ansicht wird absteigend von TransactionID sortiert) und dann in Spalte MovAvg das Ergebnis des Mittelwertes dieser Werte schreiben. Ich bin auf der Suche nach Daten in einer Reihe von Datensätzen zu sammeln. Fragte am 28. Oktober 14 um 20: 58 Ich versuche, eine laufende durchschnittliche Spalte in der SELECT-Anweisung auf der Grundlage einer Spalte aus den vorherigen Zeilen in der gleichen SELECT-Anweisung zu haben. Der Durchschnitt, den ich brauche, basiert auf den vorherigen Zeilen im Ergebnis. Die ersten 3 Zeilen der mittleren Spalte sind null, weil es keine vorherigen Zeilen gibt. Die Zeile 4 in der mittleren Spalte zeigt den Mittelwert der Spalte Nummer aus den vorherigen 3 Zeilen an. Ich brauche etwas Hilfe beim Versuch, eine SQL Select-Anweisung zu erstellen, die dies tun wird. Eine einfache Selbstverknüpfung scheint viel besser zu spielen als eine Zeile, die auf Unterabfrage verweist. Erzeugen Sie 10k Zeilen von Testdaten: Ich würde den Spezialfall der ersten 3 Reihen aus der Hauptabfrage ziehen, Sie können UNION ALLE die zurück, wenn Sie wirklich wollen Es in der Reihe gesetzt. Self-Join-Abfrage: Auf meiner Maschine dauert es etwa 10 Sekunden, die Unterabfrage Ansatz, dass Aaron Alton demonstriert dauert etwa 45 Sekunden (nachdem ich es geändert, um meine Test-Source-Tabelle zu reflektieren): Wenn Sie ein SET STATISTICS PROFILE ON, können Sie die Selbstverknüpfung hat 10k auf der Tischspule ausgeführt. Die Unterabfrage hat 10k-Ausführungen auf dem Filter, Aggregat und anderen steps. AVG (Transact-SQL) ALL Gibt die Aggregat-Funktion auf alle Werte an. ALLE ist die Voreinstellung. DISTINCT Gibt an, dass AVG nur auf jeder eindeutigen Instanz eines Wertes durchgeführt wird, unabhängig davon, wie oft der Wert auftritt. Ausdruck ist ein Ausdruck der exakten numerischen oder ungefähren numerischen Datentypkategorie, mit Ausnahme des Bit-Datentyps. Aggregierte Funktionen und Unterabfragen sind nicht zulässig. OVER (partitionbyclause orderbyclause) partitionbyclause teilt die von der FROM-Klausel erzeugte Ergebnismenge in Partitionen, auf die die Funktion angewendet wird. Wenn nicht angegeben, behandelt die Funktion alle Zeilen der Abfrageergebnismenge als einzelne Gruppe. Orderbyclause bestimmt die logische Reihenfolge, in der die Operation durchgeführt wird. Orderbyclause ist erforderlich. Weitere Informationen finden Sie unter OVER Clause (Transact-SQL). Der Rückgabetyp wird durch den Typ des ausgewerteten Ergebnisses des Ausdrucks bestimmt. Dezimal-Kategorie (p, s) Wenn der Datentyp des Ausdrucks ein Alias-Datentyp ist, ist der Rückgabetyp auch vom Alias-Datentyp. Wenn jedoch der Basisdatentyp des Alias-Datentyps gefördert wird, beispielsweise von tinyint nach int. Der Rückgabewert ist vom geförderten Datentyp und nicht der Alias-Datentyp. AVG () berechnet den Mittelwert eines Satzes von Werten, indem er die Summe dieser Werte durch die Anzahl der Nichtnullwerte dividiert. Wenn die Summe den Maximalwert für den Datentyp des Rückgabewertes überschreitet, wird ein Fehler zurückgegeben. AVG ist eine deterministische Funktion, wenn sie ohne die OVER - und ORDER BY-Klauseln verwendet wird. Es ist nicht deterministisch, wenn mit den OVER und ORDER BY Klauseln angegeben. Weitere Informationen finden Sie unter Deterministische und nichtdeterministische Funktionen. A. Mit den SUM - und AVG-Funktionen für Berechnungen Das folgende Beispiel berechnet die durchschnittlichen Urlaubsstunden und die Summe der kranken Stunden, die die Vizepräsidenten von Adventure Works Cycles verwendet haben. Jede dieser Aggregatfunktionen erzeugt einen einzigen Summenwert für alle abgerufenen Zeilen. Das Beispiel verwendet die AdventureWorks2012 Datenbank.

No comments:

Post a Comment