Ich versuche, eine laufende durchschnittliche Spalte in der SELECT-Anweisung auf der Grundlage einer Spalte aus den n vorherigen Zeilen in der gleichen SELECT-Anweisung zu haben. Der Durchschnitt, den ich benötige, 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 Durchschnitt der Nummer Spalte aus den vorherigen 3 Zeilen. Ich brauche etwas Hilfe versuchen, eine SQL Select-Anweisung zu konstruieren, die dies tun wird. Ein einfacher Selbstverknüpfung scheint Um viel besser zu spielen als eine Zeile, die auf Unterabfrage verweist. Generate 10k Zeilen von Testdaten. Ich würde den Spezialfall der ersten 3 Zeilen aus der Hauptabfrage ziehen, können Sie UNION ALLE die zurück, wenn Sie es wirklich in der Zeile setzen wollen Self-Join-Abfrage. Unter 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 widerspiegeln. Wenn Sie ein SET STATISTICS PROFILE ON, können Sie sehen, die Selbst beitreten Hat 10k auf der ta Spule Die Unterabfrage hat 10k-Ausführungen auf dem Filter, Aggregat und anderen Schritten. 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 sammeln Datensätze und dann berechnen Sie den Durchschnitt für diese Auswahl. Meine Ansicht Spalten 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 früheren 250 Zeilenansicht wird absteigend von TransactionID sortiert und dann in Spalte MovAvg schreiben das Ergebnis des Durchschnitts dieser Werte Ich bin auf der Suche nach Daten in einem Bereich von Datensätzen zu sammeln 28. Oktober 14 bei 20 58.AVG Transact-SQL. ALL Gilt das Aggregat Funktion auf alle Werte ALLE ist die default. DISTINCT Gibt an, dass AVG nur auf jeder eindeutigen Instanz eines Wertes ausgeführt wird, unabhängig davon, wie oft der Wert auftritt. expression Ist ein Ausdruck der exakten numerischen oder ungefähren Numerische Datentyp-Kategorie, mit Ausnahme des Bit-Datentyps Aggregat-Funktionen und Unterabfragen sind nicht zulässig. Und 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 von Das Abfrageergebnis, das als einzelnes Gruppenauftrag festgelegt ist, bestimmt die logische Reihenfolge, in der die Operation ausgeführt wird. Orderbyclause ist erforderlich. Weitere Informationen finden Sie unter OVER-Klausel Transact-SQL. Der Rückgabetyp wird durch den Typ des ausgewerteten Ergebnisses der expression. decimal-Kategorie bestimmt P, s. Wenn der Datentyp des Ausdrucks ein Alias-Datentyp ist, ist der Rückgabetyp auch vom Alias-Datentyp. Wenn jedoch der Basis-Datentyp des Alias-Datentyps, z. B. von tinyint bis int den Rückgabewert, gefördert wird 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 Nicht-Nullwerte If dividiert Die Summe überschreitet den Maximalwert für den Datentyp des Rückgabewertes ein Fehler wird zurückgegeben. AVG ist eine deterministische Funktion bei Verwendung ohne die OVER und ORDER BY Klauseln Es ist nicht deterministisch, wenn mit den OVER und ORDER BY Klauseln angegeben Für weitere Informationen, Siehe Deterministische und nichtdeterministische Funktionen. Mit den SUM - und AVG-Funktionen für Berechnungen verwenden. 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 eine einzige Zusammenfassung Wert für alle abgerufenen Zeilen Das Beispiel verwendet die AdventureWorks2012 Datenbank.
No comments:
Post a Comment