You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Access查询每个OrderNo对应最新DueDate的问题及优化方案

问题诊断

你的实现存在3个核心问题:

  • DMax函数的条件参数语法错误。你将[qry1]![UniqOrderNo]直接写在了条件字符串内部,Access不会主动解析字符串里的字段引用,导致实际生效的匹配条件是[OrderNo]='[qry1]![UniqOrderNo]',没有符合的记录自然返回空结果。如果你的OrderNo是数值类型,额外添加的单引号还会导致类型匹配失败。
  • qry2的查询逻辑冗余。qry1已经生成了去重的订单号列表,不需要再和DateList做内连接,连接后反而会让结果行数和原DateList表一致,出现重复的订单号记录。
  • qry1代码中的GROUPBY为拼写错误,正确写法是两个单词分开的GROUP BY,如果qry1已经能正常生成去重订单列表,大概率是你粘贴时的笔误。
最优实现方案

不需要拆分多个查询,也不需要调用DMax域函数,直接对原DateList表做分组聚合查询即可,性能和可读性都更高:

SELECT 
    OrderNo,
    MAX(DueDate) AS LatestDueDate
FROM DateList
GROUP BY OrderNo;

该查询直接按照OrderNo分组,对每个分组内的DueDate取最大值,就是你需要的每个订单对应的最新到期日,一步即可得到去重的正确结果。

原写法修正方案

如果你坚持要保留原来的双查询逻辑,可将qry2修改为如下写法(不需要关联DateList表,同时修正DMax的条件拼接逻辑):
如果OrderNo为数值类型:

SELECT 
    UniqOrderNo,
    DMax("[DueDate]", "[DateList]", "[OrderNo] = " & [UniqOrderNo]) AS LatestDueDate
FROM qry1;

如果OrderNo为文本类型:

SELECT 
    UniqOrderNo,
    DMax("[DueDate]", "[DateList]", "[OrderNo] = '" & [UniqOrderNo] & "'") AS LatestDueDate
FROM qry1;

内容的提问来源于stack exchange,提问作者Hamtash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:36:02