访问 sql 标准日期 3 个月前

access sql criteria date 3 months ago

我需要过滤 table 并仅显示 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 部分。

请帮忙。

根据您的错误和代码,您似乎在尝试将日期与字符串进行比较。无论 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
        )
    )

始终将日期处理为日期,而不是文本:

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;