SQL/ms-access 中的条件仅考虑月份中的某一天,而不是完整日期
Posted
技术标签:
【中文标题】SQL/ms-access 中的条件仅考虑月份中的某一天,而不是完整日期【英文标题】:Criteria in SQL/ms-access is only considering day of the month, not full date 【发布时间】:2018-04-02 11:47:08 【问题描述】:注意:这是来自Syntax of MS Access/SQL sub-query including aggregate functions 的后续问题。
我正在尝试创建一个数据库来管理设备的维护。我有两张桌子:
一个(库存)包含每件设备的详细信息,包括购买日期和服务期限, 一个包含已完成工作的详细信息 (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。
【问题讨论】:
【参考方案1】:粗略查看您的代码后,我不确定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#
。
【讨论】:
i.Equipment 和 w.Equipment 之间存在一对多关系,因为 Inventory 是一个列表所有设备,WorkDone 是完整的服务历史记录,因此每件设备都可能在 WorkDone 中出现多次。 这很奇怪:除了看起来更漂亮之外,我无法区分您的代码和我的代码,但是您的代码似乎可以工作,而我的代码却不行... @J.Warren 关于各种 Equipment 字段,我的观点是i.EquipEment
拼写有一个额外的 e
,而 w.Equipment
不是。
@J.Warren 请注意,在我的代码中,Nz
函数在 DateAdd
函数之前进行评估 - 这可能是差异的根源。以上是关于SQL/ms-access 中的条件仅考虑月份中的某一天,而不是完整日期的主要内容,如果未能解决你的问题,请参考以下文章
在 DAX 中测量以计算仅适用于 Power BI 的所选月份的 YTD