2017-09-05 1 views
0

Ich muss eine Tabelle filtern und nur Ergebnisse anzeigen, die vor 3 Monaten sind. Also wenn es August ist, um mir Mai zu zeigen.Zugriff sql Kriterium date Vor 3 Monaten

Hier ist meine Abfrage SQL-Code:

SELECT tblAppointment.WorkID, tblAppointment.AppointmentDate, tblCustomer.CustomerID 
FROM tblWork INNER JOIN (tblCustomer INNER JOIN tblAppointment ON tblCustomer.CustomerID = tblAppointment.CustomerID) ON tblWork.WorkID = tblAppointment.WorkID 
GROUP BY tblAppointment.WorkID, tblAppointment.AppointmentDate, tblCustomer.CustomerID 
HAVING (((tblAppointment.WorkID)=3) AND ((tblAppointment.AppointmentDate) Between Format(DateAdd("m",-3,Date()),"m") And Format(DateAdd("m",-4,Date()),"m"))) 
ORDER BY tblAppointment.AppointmentDate, tblCustomer.CustomerID; 

Ich erhalte einen Fehler. Ich versuche, HAVING Teil zu beheben.

Bitte helfen.

+0

Welche Fehler erhalten Sie? –

+2

10 Die HAVING-Klausel ist für Aggregatfunktionsbedingungen gedacht. Setzen Sie reguläre Bedingungen in die WHERE-Klausel. – jarlh

+0

Warum gruppieren Sie? Sie verwenden keine Gruppenfunktion .... Wie Peter Abolins schrieb, legen Sie Ihren Fehler. Nur um zu versuchen: entfernen Sie die gesamte Gruppe durch und ändern Sie Ihr "Haben" mit einer "Where" -Klausel. –

Antwort

1

immer behandeln Daten wie Termine, nicht Text:

SELECT 
    tblAppointment.WorkID, 
    tblAppointment.AppointmentDate, 
    tblCustomer.CustomerID 
FROM 
    tblWork 
INNER JOIN 
    (tblCustomer 
    INNER JOIN tblAppointment 
    ON tblCustomer.CustomerID = tblAppointment.CustomerID) 
    ON tblWork.WorkID = tblAppointment.WorkID 
WHERE 
    tblAppointment.AppointmentDate 
    Between 
     DateSerial(Year(Date()), Month(Date())-3, 1) 
    And 
     DateSerial(Year(Date()), Month(Date())-2, 0) 
GROUP BY 
    tblAppointment.WorkID, 
    tblAppointment.AppointmentDate, 
    tblCustomer.CustomerID 
HAVING 
    tblAppointment.WorkID=3 
ORDER BY 
    tblAppointment.AppointmentDate, 
    tblCustomer.CustomerID; 
+0

Thxs .... Küssesssss – YvetteLee

0

Basierend auf Ihrem Fehler und dem Code sieht es so aus, als würden Sie Daten mit Strings vergleichen. Unabhängig von den GroupBy/Having Konstrukte notwendig, ändern Sie das Datum Vergleich zu:

and DatePart("m", Date()) - DatePart("m", tblAppointment.AppointmentDate)) = 3 

Sie ändern müssen, den Fall für den Beginn/Ende des Jahres zu decken.

AND (
     (
      Year(Date()) = Year(tblAppointment.AppointmentDate) 
      AND 
      DatePart("m", Date()) - DatePart("m", tblAppointment.AppointmentDate) = 3 
     ) 
    OR 
     (
      Year(Date()) > Year(tblAppointment.AppointmentDate) 
      AND 
      DatePart("m", Date()) + 12 - DatePart("m", tblAppointment.AppointmentDate) = 3 
     ) 
    )