注意:这是来自Syntax of MS Access/SQL sub-query including aggregate functions的后续问题。
我正在尝试生成一个数据库来管理设备的维护。我有两张桌子:
一个(库存)包含每件设备的详细信息,包括购买日期和服务期, 一个包含已完成工作的详细信息( WorkDone ),包括工作执行的日期(工作日期)。 我想要一个查询,显示下次应该提供服务的日期。到目前为止,我有:
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])));
仅显示当月的日期不到一周时(例如,如果是今天的第1天,它将显示 NextServiceDate 在任何月份的前7天内发生的所有条目任何一年,过去或未来)。出于某种原因,它只考虑当月的日子,而不是完整的日期。我不明白为什么......
注意:我有一个英国系统,所以日期格式是dd-mm-yyyy。
答案 0 :(得分:1)
在粗略审核您的代码后,我不确定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#
请注意,区域日期格式的差异仅在您指定文字日期时有效(例如,作为条件),在这种情况下,您需要遵循格式input.query
。