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

如何使用JET SQL仅更新表中最大日期的记录?

解决Access JET SQL中仅更新表1最新日期记录的问题

你的现有写法存在问题:HAVING MAX(date) 是不完整的条件,HAVING子句需要明确的比较逻辑,而且直接用IN子查询只能筛选出存在最大日期的123分组,没法精准定位到分组内的那条最大日期记录。

要实现仅更新tbl1中每个123分组下最大日期的记录,同时关联tbl2完成字段赋值,以下两种JET SQL写法可以满足需求:

方法1:通过子查询获取分组最新日期,三重关联更新

UPDATE (tbl1 
INNER JOIN tbl2 ON tbl1.123 = tbl2.123)
INNER JOIN (
    SELECT 123, MAX(date) AS max_date
    FROM tbl1
    GROUP BY 123
) AS latest ON tbl1.123 = latest.123 AND tbl1.date = latest.max_date
SET tbl1.a = tbl2.b;

逻辑说明:

  • 子查询latest先算出每个123对应的最大日期
  • 将tbl1、tbl2与该子查询做关联,确保只匹配到tbl1中123相同且日期等于分组最大日期的记录
  • 最终仅对这些符合条件的记录执行更新

方法2:用相关子查询在WHERE子句中定位最新记录

UPDATE tbl1 
INNER JOIN tbl2 ON tbl1.123 = tbl2.123
SET tbl1.a = tbl2.b
WHERE tbl1.date = (
    SELECT MAX(date)
    FROM tbl1 AS t
    WHERE t.123 = tbl1.123
);

逻辑说明:

  • 针对tbl1的每一条记录,通过相关子查询找到同123分组下的最大日期
  • 仅保留日期等于该最大日期的记录进行更新
  • 同时关联tbl2完成字段赋值

额外注意

  • 如果你的日期字段名确实是date(这是Access保留字),建议用方括号包裹为[date],避免语法报错
  • 若同一123分组下有多条记录日期等于最大日期,上述写法会更新所有这些记录;如果需要仅更新其中一条(比如主键最大的),需在子查询中额外加入主键的判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:10:55