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

如何在Access中限制查询仅显示员工最近一次培训记录

解决Access中只显示员工每项培训最近记录的问题

嘿,刚学Access的话,咱们一步一步来,绝对能轻松搞定你的需求!你要的是每个员工的每项培训只保留最近完成的那一条记录,同时显示员工姓名、培训标题、日期和到期计算值,对吧?我给你两种方法,先讲最适合新手的可视化操作,再给你进阶的SQL代码选项~

方法一:用查询设计视图(纯鼠标操作,新手友好)

这个方法分两步走,先找出每个员工每项培训的最近日期,再关联到完整记录:

  1. 创建“最新培训日期”查询
    • 打开Access,点击「创建」选项卡 → 选择「查询设计」
    • 添加TrainingSessions表到查询窗口
    • 从表中拖入3个字段:用来关联员工的字段(比如EmployeeID,比姓名更靠谱,避免重名)、TrainingTitle、SessionDate
    • 点击菜单栏里的「总计」按钮(就是那个Σ符号,会在字段行下面多出一行「总计」)
    • 把SessionDate对应的「总计」改成最大值,另外两个字段的「总计」保持分组
    • 保存这个查询,比如命名为qry_LatestTrainingDates
  2. 创建最终查询,关联员工信息和最新记录
    • 新建一个查询设计,添加Employees表、刚才的qry_LatestTrainingDates,还有TrainingSessions表
    • 建立关联:
      • Employees的EmployeeID → qry_LatestTrainingDates的EmployeeID
      • qry_LatestTrainingDates的TrainingTitle → TrainingSessions的TrainingTitle
      • qry_LatestTrainingDates的MaxOfSessionDate → TrainingSessions的SessionDate
    • 从Employees拖入LastName、FirstName;从TrainingSessions拖入TrainingTitle、SessionDate
    • 最后添加你的到期日期计算:在字段行的空白处输入表达式,比如ExpiryDate: DateAdd("yyyy",1,[SessionDate])(这里是培训后1年到期,你可以改成自己需要的计算规则)
    • 运行查询,就能看到每个员工每项培训的最近记录啦!

方法二:直接用SQL语句(适合想快速上手代码的同学)

如果不想一步步点鼠标,也可以直接写SQL代码,把下面的内容复制到SQL视图里(注意替换成你实际的字段名,比如如果不用EmployeeID关联,就改成你用的字段):

SELECT 
    e.LastName, 
    e.FirstName, 
    ts.TrainingTitle, 
    ts.SessionDate,
    -- 替换成你的到期日期计算表达式,示例为培训后1年到期
    DateAdd("yyyy", 1, ts.SessionDate) AS ExpiryDate
FROM 
    Employees e
INNER JOIN 
    TrainingSessions ts ON e.EmployeeID = ts.EmployeeID
INNER JOIN (
    -- 子查询:找出每个员工每项培训的最近完成日期
    SELECT 
        EmployeeID, 
        TrainingTitle, 
        MAX(SessionDate) AS LatestSessionDate
    FROM 
        TrainingSessions
    GROUP BY 
        EmployeeID, TrainingTitle
) latest ON ts.EmployeeID = latest.EmployeeID 
    AND ts.TrainingTitle = latest.TrainingTitle 
    AND ts.SessionDate = latest.LatestSessionDate;

代码解释:

  • 子查询latest先算出每个员工(EmployeeID)每项培训(TrainingTitle)的最近日期(MAX(SessionDate))
  • 然后把主表和这个子查询关联,只保留日期匹配的记录,这样就过滤掉了旧的培训记录

小提醒

  • 尽量用唯一的员工ID(比如EmployeeID)关联表,不要只用姓名,避免重名员工的记录混乱
  • 如果你的TrainingTitle是存在Trainings表而不是TrainingSessions里,只要把TrainingSessions和Trainings通过TrainingID关联,提取Trainings.TrainingTitle就行,逻辑是一样的

内容的提问来源于stack exchange,提问作者Ben H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:04:28