SQL/ms-access 中的条件仅考虑每月的日期,而不是完整日期
Criteria in SQL/ms-access is only considering day of the month, not full date
注意:这是来自 的跟进问题。
我正在尝试生成一个数据库来管理设备维护。我有两个表:
一个(库存)包含每件设备的详细信息,包括购买日期和服务期限,
一个包含已完成工作的详细信息 (WorkDone),包括完成工作的日期 (Work Date)。
我想要一个显示下次维修日期的查询。到目前为止我有:
SELECT Max(NZ(DateAdd('m', i.[Service Period], w.[Work Date]),
DateAdd('m', i.[Service Period], i.[Purchase Date]))
) AS NextServiceDate, i.Equipement
FROM Inventory i LEFT JOIN WorkDone w ON i.ID = w.Equipment
GROUP BY i.Equipement
我现在想在 NextServiceDate 之前订购,并且只显示 NextServiceDate 在下周的条目。但是添加
HAVING (((Max(Nz(DateAdd('m',i.[Service Period],w.[Work Date]),DateAdd('m',i.[Service Period],i.[Purchase Date]))))<DateAdd('ww',1,Date()))
ORDER BY Max(Nz(DateAdd('m',i.[Service Period],w.[Work Date]),DateAdd('m',i.[Service Period],i.[Purchase Date])));
仅在距现在不到一周的日期时显示(例如,如果今天是第一天,它将显示 NextServiceDate 出现在前 7 天的所有条目任何一年任何一个月的天数,过去或未来)。出于某种原因,它只考虑一个月中的第几天而不是完整的日期。我不明白为什么...
注意:我有一个英国系统,所以日期格式是 dd-mm-yyyy。
粗略检查了您的代码后,我不确定 i.Equipement
的实例是否有错字(因为您的 JOIN
子句引用了类似的字段 w.Equipment
),或者这两个字段是否有意命名不同?
我看不出您的代码有任何其他错误,但如果您将代码重组为以下内容,可能会更清晰、更容易调试:
SELECT
Max(sub.dat) as NextServiceDate, sub.eqp
FROM
(
SELECT
DateAdd('m',i.[Service Period],Nz(w.[Work Date],i[Purchase Date])) as dat, i.Equipement as eqp
FROM
Inventory i LEFT JOIN WorkDone w ON i.ID = w.Equipment
) AS sub
GROUP BY
sub.eqp
HAVING
Max(sub.dat) < DateAdd('ww',1,Date())
ORDER BY
Max(sub.dat)
请注意,区域日期格式的差异只会在您指定文字日期(例如,作为标准)时产生影响,在这种情况下,您需要遵守格式 #mm/dd/yyyy#
。
注意:这是来自
我正在尝试生成一个数据库来管理设备维护。我有两个表:
一个(库存)包含每件设备的详细信息,包括购买日期和服务期限, 一个包含已完成工作的详细信息 (WorkDone),包括完成工作的日期 (Work Date)。 我想要一个显示下次维修日期的查询。到目前为止我有:
SELECT Max(NZ(DateAdd('m', i.[Service Period], w.[Work Date]),
DateAdd('m', i.[Service Period], i.[Purchase Date]))
) AS NextServiceDate, i.Equipement
FROM Inventory i LEFT JOIN WorkDone w ON i.ID = w.Equipment
GROUP BY i.Equipement
我现在想在 NextServiceDate 之前订购,并且只显示 NextServiceDate 在下周的条目。但是添加
HAVING (((Max(Nz(DateAdd('m',i.[Service Period],w.[Work Date]),DateAdd('m',i.[Service Period],i.[Purchase Date]))))<DateAdd('ww',1,Date()))
ORDER BY Max(Nz(DateAdd('m',i.[Service Period],w.[Work Date]),DateAdd('m',i.[Service Period],i.[Purchase Date])));
仅在距现在不到一周的日期时显示(例如,如果今天是第一天,它将显示 NextServiceDate 出现在前 7 天的所有条目任何一年任何一个月的天数,过去或未来)。出于某种原因,它只考虑一个月中的第几天而不是完整的日期。我不明白为什么...
注意:我有一个英国系统,所以日期格式是 dd-mm-yyyy。
粗略检查了您的代码后,我不确定 i.Equipement
的实例是否有错字(因为您的 JOIN
子句引用了类似的字段 w.Equipment
),或者这两个字段是否有意命名不同?
我看不出您的代码有任何其他错误,但如果您将代码重组为以下内容,可能会更清晰、更容易调试:
SELECT
Max(sub.dat) as NextServiceDate, sub.eqp
FROM
(
SELECT
DateAdd('m',i.[Service Period],Nz(w.[Work Date],i[Purchase Date])) as dat, i.Equipement as eqp
FROM
Inventory i LEFT JOIN WorkDone w ON i.ID = w.Equipment
) AS sub
GROUP BY
sub.eqp
HAVING
Max(sub.dat) < DateAdd('ww',1,Date())
ORDER BY
Max(sub.dat)
请注意,区域日期格式的差异只会在您指定文字日期(例如,作为标准)时产生影响,在这种情况下,您需要遵守格式 #mm/dd/yyyy#
。