Umzugsdurchschnitt In Sql 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 andere Schritte. Nach Ihrer Beschreibung haben Sie eine Matrix in Ihrem Bericht. Jetzt wollen Sie den Mittelwert der letzten 6 Monate berechnen. Recht Im Reporting Service können wir benutzerdefinierten Code in Bericht setzen, um mit komplizierten Logik umzugehen. Füge noch eine weitere Spalte innerhalb der Gruppe hinzu und rufe die im benutzerdefinierten Code definierten Funktionen auf. Für Ihre Anforderung haben wir den Roberts-Code geändert, um Ihr Ziel zu erreichen. Wir haben Ihren Fall in unserer lokalen Umgebung mit Musterdaten getestet. Hier sind Schritte und Screenshots für Ihre Referenz: Setzen Sie den benutzerdefinierten Code in den Bericht: Private QueueLength As Integer 6 Private QueueSum As Double 0 Private QueueFull As Boolean False Private IDChange Als Stringquotquot Dim-Warteschlange Als neue System. Collections. Generic. Queue (Of Integer) Öffentliche Funktion CumulativeQueue (ByVal currentValue als Integer, id als String) als Objekt Dim removedValue als Double 0 Wenn idChange ltgt id dann ClearQueue () idChange id queueSum 0 queueFull False CumulativeQueue (currentValue, id) Else If queue. Count gt queueLength Dann entferntValue Warteschlange. Dequeue () End If queueSum 43 currentValue queueSum - removedValue queue. Enqueue (currentValue) Wenn queue. Count lt queueLength Dann Rückkehr Nichts ElseIf Warteschlange. Count queueLength Und queueFull False Dann queueFull True Return queueSum queueLength Else Return (queueSum) queueLength End If End Wenn End Function public function ClearQueue () Dim i als Integer Dim n als Integer Queue. Count-1 für in To 0 Step-1 queue. Dequeue () next i End-Funktion Füge noch eine Zeile innerhalb der Gruppe hinzu, ruf die Funktion an benutzerdefinierter Code. Speichern und Vorschau. Es sieht aus wie unten: Wenn Sie irgendeine Frage haben, fühlen Sie bitte sich frei zu fragen. Beste Grüße, Simon Hou (Pactera) Mittwoch, 14. Mai 2014 12:36 Alle Antworten Yep. Können Sie RunningValue-Funktion für diese etwas wie unten verwenden Bitte markieren Sie diese als Antwort, wenn es hilft, das Problem zu lösen Visakh --------------------------- - visakhm. blogspot facebookVmBlogs Entsprechend Ihrer Beschreibung haben Sie eine Matrix in Ihrem Bericht. Jetzt wollen Sie den Mittelwert der letzten 6 Monate berechnen. Recht Im Reporting Service können wir benutzerdefinierten Code in Bericht setzen, um mit komplizierten Logik umzugehen. Füge noch eine weitere Spalte innerhalb der Gruppe hinzu und rufe die im benutzerdefinierten Code definierten Funktionen auf. Für Ihre Anforderung haben wir den Roberts-Code geändert, um Ihr Ziel zu erreichen. Wir haben Ihren Fall in unserer lokalen Umgebung mit Musterdaten getestet. Hier sind Schritte und Screenshots für Ihre Referenz: Setzen Sie den benutzerdefinierten Code in den Bericht: Private QueueLength As Integer 6 Private QueueSum As Double 0 Private QueueFull As Boolean False Private IDChange Als Stringquotquot Dim-Warteschlange Als neue System. Collections. Generic. Queue (Of Integer) Öffentliche Funktion CumulativeQueue (ByVal currentValue als Integer, id als String) als Objekt Dim removedValue als Double 0 Wenn idChange ltgt id dann ClearQueue () idChange id queueSum 0 queueFull False CumulativeQueue (currentValue, id) Else If queue. Count gt queueLength Dann entferntValue Warteschlange. Dequeue () End If queueSum 43 currentValue queueSum - removedValue queue. Enqueue (currentValue) Wenn queue. Count lt queueLength Dann Rückkehr Nichts ElseIf Warteschlange. Count queueLength Und queueFull False Dann queueFull True Return queueSum queueLength Else Return (queueSum) queueLength End If End Wenn End Function public function ClearQueue () Dim i als Integer Dim n als Integer Queue. Count-1 für in To 0 Step-1 queue. Dequeue () next i End-Funktion Füge noch eine Zeile innerhalb der Gruppe hinzu, ruf die Funktion an benutzerdefinierter Code. Speichern und Vorschau. Es sieht aus wie unten: Wenn Sie irgendeine Frage haben, fühlen Sie bitte sich frei zu fragen. Beste Grüße, Simon Hou (Pactera) Mittwoch, 14. Mai 2014 12:36 PM Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Website von Technet zu verstehen. Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Website von Technet verlassen. Möchten Sie teilnehmen 2017 Microsoft. Alle Rechte vorbehalten.

Comments