2017-09-05 15 views
0

我需要篩選一個表並僅顯示3個月前的結果。所以如果是八月,讓我看看五月。訪問sql標準日期3個月前

這裏是我的查詢的SQL代碼:

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; 

我得到一個錯誤。我正在修復HAVING部分。

請幫忙。

+0

你得到什麼錯誤? –

+2

HAVING子句用於聚合函數條件。將常規條件放在WHERE子句中。 – jarlh

+0

你爲什麼分組?你沒有使用任何組功能....就像Peter Abolins寫的那樣,放置你的錯誤。試一試:刪除整個組,然後用「where」子句更改「having」。 –

回答

1

始終處理日期爲日期,而不是文本:

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 .... Kissesssss – YvetteLee

0

根據你的錯誤和代碼,它看起來像你試圖比較日期和字符串。無論GroupBy/Having結構是必要的,更改日期比較:

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

您可能需要修改,以支付年開始/結束的情況下。

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 
     ) 
    )