Da ich mit einem ziemlich großen Datensatz arbeite, suche ich nach einem effizienteren Weg, um frühere Werte basierend auf einer Datumssequenz zu erhalten. Ich bin derzeit eine SELECT TOP 1 Sub-Abfrage für jeden Wert, aber das braucht viel Zeit, um jedes Mal, wenn ich die AbfrageEffizienter vorheriger Wert mit SQL
Beispieldaten ausführen:
TDate Object Price Volume
18.05.2017 ObjectA 105 10
18.05.2017 ObjectB 110 10
18.05.2017 ObjectC 120 10
19.05.2017 ObjectA 100 12
19.05.2017 ObjectB 75 10
19.05.2017 ObjectD 33 10
22.05.2017 ObjectA 105 15
22.05.2017 ObjectB 80 10
22.05.2017 ObjectD 55 10
Mein Code:
SELECT TDate AS TodaysDate, Object, Price AS TodaysPrice, Volume AS TodaysVolume,
(SELECT TOP 1 TDate
FROM Table1 AS P2
WHERE P2.Object = Table1.Object
AND P2.TDate < Table1.TDate
ORDER BY P2.TDate DESC) As prevDate,
(SELECT TOP 1 Price
FROM Table1 AS P2
WHERE P2.Object = Table1.Object
AND P2.TDate < Table1.TDate
ORDER BY P2.TDate DESC) As prevPrice,
(SELECT TOP 1 Volume
FROM Table1 AS P2
WHERE P2.Object = Table1.Object
AND P2.TDate < Table1.TDate
ORDER BY P2.TDate DESC) As PrevVolume
FROM Table1
Ausgang:
TodaysDate Object TodaysPrice TodaysVolume prevDate prevPrice PrevVolume
18.05.2017 ObjectA 105 10
18.05.2017 ObjectB 110 10
18.05.2017 ObjectC 120 10
19.05.2017 ObjectA 100 12 18.05.2017 105 10
19.05.2017 ObjectB 75 10 18.05.2017 110 10
19.05.2017 ObjectD 33 10
22.05.2017 ObjectA 105 15 19.05.2017 100 12
22.05.2017 ObjectB 80 10 19.05.2017 75 10
22.05.2017 ObjectD 55 10 19.05.2017 33 10
Der Ausgang ist richtig, aber ich würde sehr Eingang auf zwei Dinge zu schätzen wissen;
1) Gibt es eine Möglichkeit, frühere Daten und Werte effizienter zu berechnen? (Ich verwende Microsoft Access 2010)
2) Wie kann ich den Preisunterschied zwischen TodaysPrice und PrevPrice direkt in den SQL-Code einbeziehen?
Vielen Dank im Voraus für jede Beratung und Eingabe!
Ist PrevDate immer genau einen Monat vor TodaysDate? – AVG
Nein - leider gibt es kein Muster in den Daten. PrevDate ist das vorherige Datum, an dem das Objekt in der Tabelle aufgeführt wird (d. H. Wenn es über ein Wochenende ist, ist der vorherige Tag der letzte Freitag) – user3777079