2016-04-04 10 views
0

Ich versuche, Self-Joining zu verwenden, um rollende tägliche 1-Jahr-Durchschnittswerte über eine Liste von Tickern zu berechnen. Der folgende Code scheint einen Durchschnitt über alle Ticker und Daten zu liefern, anstatt eindeutige Ergebnisse zu liefern, die sich für jeden Ticker und jedes Datum ändern würden. (Mit anderen Worten, die dritte Spalte in der Ausgabe ist die gleiche ganz unten, aber jede Zeile sollte eigentlich eindeutig sein).So verwenden Sie Self-Joining, um einen historischen gleitenden Durchschnitt zu berechnen

Irgendwelche Ratschläge hier? danke

SELECT [Ticker], [Date], 
(SELECT AVG(T.[Close]) 
FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS T 
JOIN [intradayOHLC_Selected_Closing_Prices_Staging] AS O2 
ON T.[Ticker] = O2.[Ticker] 
AND T.[Date] between O2.[Date 250 Days Ago] AND O2.[Date]) 
FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS O2 
+0

Welche Datenbank verwenden Sie? –

+0

Vielen Dank. Das ist perfekt – Treyvon

+0

Und um Ihre Frage zu beantworten, ist dies SQL Server 2012 und meine eigene Finanzdatenbank. Vielen Dank – Treyvon

Antwort

0

Sie haben eine zusätzliche JOIN in der Unterabfrage. Dies ist nicht erforderlich. Sie benötigen nur eine korrelierte Unterabfrage.

SELECT [Ticker], [Date], 
     (SELECT AVG(T.[Close]) 
     FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS T 
     WHERE T.[Ticker] = O2.[Ticker] AND 
       T.[Date] between O2.[Date 250 Days Ago] AND O2.[Date] 
     ) as RollingAverage 
FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS O2; 
Verwandte Themen