Saturday, 1 April 2017

Umzugsdurchschnitt In Sql 2008

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 Datensätze sammeln und dann den Durchschnitt für diese Auswahl berechnen. Meine Ansichtspalten 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 vorherigen 250 Zeilen Ansicht sortiert absteigend von TransactionID und dann in Spalte MovAvg das Ergebnis der Durchschnitt dieser Werte Ich bin auf der Suche nach Daten in einer Reihe von Datensätzen zu sammeln 28. Oktober 14 bei 20 58. Dies 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 zu beantworten Vor Jahren mit Standard SQL. Joe Celko SQL Puzzles und Antworten Zitat Dieser letzte Update Versuch schlägt vor, dass wir das Prädikat verwenden könnten, um eine Abfrage zu konstruieren, die uns einen gleitenden Durchschnitt geben würde. Ist die zusätzliche Spalte oder die Abfrage ap Proach besser Die Abfrage ist technisch besser, weil der UPDATE-Ansatz die Datenbank verderben wird. Allerdings, wenn die historischen Daten aufgezeichnet werden, wird sich nicht ändern und die Berechnung der gleitenden Durchschnitt ist teuer, könnten Sie erwägen, die Spalte Ansatz. SQL Puzzle query. by alle Bedeutet Uniform Sie werfen auf den passenden Gewicht Eimer je nach der Entfernung von der aktuellen Zeitpunkt Zum Beispiel nehmen Gewicht 1 für Datenpunkte innerhalb von 24 Stunden aus aktuellen Datenpunkt Gewicht 0 5 für Datenpunkte innerhalb von 48 Stunden Dieser Fall ist es wichtig, wie viel aufeinander folgende Datenpunkte wie 6 12 Uhr und 11 48pm sind von einander entfernt Ein Anwendungsfall, den ich mir vorstellen kann, wäre ein Versuch, das Histogramm zu glätten, wo Datapunkte nicht dicht genug sind msciwoj 27. Mai 15 um 22 22. Ich bin nicht sicher, dass Ihre erwartete Ergebnisausgabe klassisch einfaches Rolling zeigt Durchschnitt für 3 Tage Weil zum Beispiel das erste Dreifach von Zahlen per Definition gibt. Aber Sie erwarten 4 360 und es ist verwirrend. Trotzdem schlage ich vor Die folgende lösung, die fensterfunktion verwendet AVG 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 mit verpackt ist Fall, wenn rownum dann NULLs in ersten Reihen zu zwingen, wo 3 Tage Moving Average ist bedeutungslos. answered Feb 23 16 bei 13 12.Wir können Joe Celko s schmutzig links äußere Join-Methode, wie oben von Diego Scaravaggi zitiert, um die Frage als beantworten Es wurde gefragt. Generates die angeforderten output. answered Jan 9 16 bei 0 33.Ihr Antwort.2017 Stack Exchange, Inc. Nach Ihrer Beschreibung haben Sie eine Matrix in Ihrem Bericht Jetzt wollen Sie den Durchschnittswert der letzten 6 Monate zu berechnen Right. In Reporting Service können wir benutzerdefinierten Code in Bericht setzen, um mit komplizierten Logik umzugehen Fügen Sie eine weitere Spalte Zeile innerhalb der Gruppe und rufen Sie die Funktionen in benutzerdefinierten Code definiert Für Ihre Anforderung haben wir modifiziert Robert S-Code, um Ihr Ziel zu erreichen Wir haben Ihren Fall getestet im Unsere lokale Umgebung mit Beispieldaten 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 String Dim Warteschlange Als New Integer Public Function CumulativeQueue ByVal currentValue Als Integer, id Als String als Objekt Dim entferntValue als Double 0 Wenn idChange id dann ClearQueue idChange id queueSum 0 queueFull False CumulativeQueue currentValue, id Else Wenn queueLength Then removedValue End Wenn queueSum currentValue queueSum - removedValue Wenn queueLength Dann Rückkehr Nichts ElseIf queueLength Und queueFull False Dann queueFull True Return-WarteschlangeSum-WarteschlangeLength Else Return-WarteschlangeSum-WarteschlangeLänge Ende If End If End Funktion Öffentliche Funktion ClearQueue Dim i als Integer Dim n als Integer für In To 0 Schritt-1 Weiter i End-Funktion. Eine weitere Zeile innerhalb der Gruppe hinzufügen, rufen Sie die Funktion auf Definiert in benutzerdefinierten Code. Save und Vorschau Es sieht aus wie unten. Wenn Sie irgendwelche Fragen haben, p Lease fühlen sich frei zu fragen. Best Regards, Simon Hou Pactera. Wednesday, Mai 14, 2014 12 36 PM. All Antworten. Yep können Sie RunningValue-Funktion für this. something wie unten. Bitte markieren dies als Antwort, wenn es hilft, die zu lösen Ausgabe Visakh. According zu Ihrer Beschreibung haben Sie eine Matrix in Ihrem Bericht Nun wollen Sie den durchschnittlichen Wert der letzten 6 Monate berechnen Right. In Reporting Service können wir benutzerdefinierten Code in Bericht setzen, um mit komplizierten Logik umgehen Eine weitere Spalte Zeile hinzufügen Innerhalb der Gruppe und rufen Sie die Funktionen in benutzerdefinierten Code definiert Für Ihre Anforderung haben wir modifiziert Robert S-Code, um Ihr Ziel zu erreichen Wir haben Ihren Fall in unserer lokalen Umgebung mit Beispieldaten getestet Hier sind Schritte und Screenshots für Ihre Referenz. Stellen Sie den benutzerdefinierten Code in Bericht Private QueueLength As Integer 6 Private QueueSum als Double 0 Private QueueFull As Boolean False Private IDChange Als String Dim-Warteschlange Als New Integer Öffentliche Funktion CumulativeQueue ByVal currentValue Als Integer, id Als String Als Objekt Dim removedValue Als double 0 Wenn idChange id dann ClearQueue idChange id queueSum 0 queueFull False CumulativeQueue currentValue, id Else Wenn queueLength Then removedValue End Wenn queueSum currentValue queueSum - removedValue Wenn queueLength Then Return Nichts ElseIf queueLength Und queueFull False Dann queueFull True Return queueSum queueLength Else Return queueSum queueLength Ende Wenn Ende Wenn Ende Funktion Öffentliche Funktion ClearQueue Dim i als Integer Dim n als Integer für In To 0 Schritt-1 Weiter i End-Funktion. Eine weitere Zeile innerhalb der Gruppe hinzufügen, rufen Sie die Funktion in benutzerdefinierten Code. Save und Vorschau Es sieht aus Wie unten. Wenn Sie irgendeine Frage haben, fühlen Sie bitte sich frei zu bitten. Best Regards, Simon Hou Pactera. Wednesday, Mai 14, 2014 12 36 PM. Microsoft führt eine Online-Umfrage, um Ihre Meinung über die Website von Technet zu verstehen Wenn Sie sich entscheiden Um teilzunehmen, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Website von Technet verlassen. Möchten Sie teilnehmen? 2017 Microsoft Alle Rechte vorbehalten.


No comments:

Post a Comment