2016-06-22 2 views
1

ich eine Tabelle in Access 2013 (Tabelle 1) haben, die die folgenden Spalten enthält:Access-Abfrage Vormonatsdaten zu ziehen

ID (pk), ReportDate, Anzahl

Die aktuellsten Daten ist 30-50 Tage alt. Zum Beispiel wären heute (22.6.16) die jüngsten Daten die Zeile 5/1/16, da die Daten vom 6. Januar 2016 erst Mitte Juli eingegeben werden. (Alle Daten in der ReportDate-Spalte sind die ersten des Monats, dh: 01.04.16, 01.05.16 usw.)

Ich muss eine Abfrage schreiben, die einen 6-monatigen Lookback durchführt, aber schließen Sie die aktuellsten Daten des Monats aus.

So zum Beispiel, wenn ich die Abfrage heute (6/22/16) lief, würde ich nur die Zeilen erhalten, die zu den folgenden Monaten entsprechen:

12/1/2015 
1/1/2016 
2/1/2016 
3/1/2016 
4/1/2016 

Die Daten für 01.05/16 sollte ausgeschlossen werden, da es der letzte Monat ist.

Ich kann die vorherigen 6 Monate im Wert von Daten mit der Einstellung der Kriterien (in QBE) für ReportDate zu >=DateAdd("m",-6,Date()), aber ich kann nicht scheinen, herauszufinden, wie der letzte Monat auszuschließen.

Antwort

2

Dies sollte Ihnen das Startdatum der letzten Monat in der Tabelle:

SELECT Max(ReportDate) AS MaxOfReportDate 
FROM Table1; 

Wenn das der Monat, den Sie ausschließen möchten, verwenden Sie die Abfrage als Unterabfrage, die Sie verbinden Kreuz zurück an den Tisch. Dann können Sie eine WHERE Klausel mit einem BETWEEN Zustand, deren Endpunkte verwenden, werden bestimmt durch DateAdd() Ausdrücke basierend auf MaxOfReportDate:

SELECT t.ID, t.ReportDate, t.Amount 
FROM 
    Table1 AS t, 
    (
     SELECT Max(ReportDate) AS MaxOfReportDate 
     FROM Table1 
    ) AS sub 
WHERE 
    t.ReportDate BETWEEN DateAdd('m', -6, sub.MaxOfReportDate) 
        AND DateAdd('m', -1, sub.MaxOfReportDate); 
+0

Vielen Dank! Das hat perfekt funktioniert! –