访问 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;
我需要过滤 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;