SQL / ms访问中的标准仅考虑月中的某一天,而不是完整日期

时间:2018-04-02 11:47:08

标签: sql ms-access ms-access-2010

注意:这是来自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。

1 个答案:

答案 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