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

MS Access 2010按Name分组并筛选符合日期条件的数据

在Access 2010中筛选每个用户的最新有效记录

刚好碰到过类似的需求,给你两种靠谱的方法来实现——每个用户只保留最新且不晚于2018年4月6日的那一行数据。

先明确你的数据源和期望结果:

原数据表:

NameDateTeam
John04/04/2018A
John02/02/2018B
James10/10/2018A
James03/03/2018C
Matt08/09/2018D

期望筛选结果:

NameDateTeam
John04/04/2018A
James03/03/2018C

方法一:子查询分组获取最大日期后关联

这是Access里处理这类分组筛选最常用的方式,逻辑清晰且效率不错:

SELECT t.Name, t.Date, t.Team
FROM YourTableName AS t
INNER JOIN (
    -- 先按Name分组,找出每个用户不晚于指定日期的最大日期
    SELECT Name, MAX(Date) AS MaxDate
    FROM YourTableName
    WHERE Date <= #04/06/2018#
    GROUP BY Name
) AS sub ON t.Name = sub.Name AND t.Date = sub.MaxDate

逻辑解释:

  1. 子查询sub会先过滤掉所有晚于4月6日的记录,然后按Name分组,算出每个用户的最新有效日期MaxDate。
  2. 再把原表t和这个子查询关联,匹配Name和对应的MaxDate,就能精准拿到每个用户最新那条记录的完整信息。

方法二:用子查询直接匹配每个用户的最大日期

如果你的数据量不大,这种写法更直观,不用写关联:

SELECT t1.Name, t1.Date, t1.Team
FROM YourTableName AS t1
WHERE t1.Date = (
    -- 针对当前行的用户,找出他不晚于指定日期的最大日期
    SELECT MAX(t2.Date)
    FROM YourTableName AS t2
    WHERE t2.Name = t1.Name AND t2.Date <= #04/06/2018#
)
-- 再额外加一层过滤,确保当前行日期符合要求
AND t1.Date <= #04/06/2018#

注意事项:

  • 记得把代码里的YourTableName替换成你实际的表名。
  • Access里日期常量要用#包裹,比如#04/06/2018#,如果是其他地区日期格式(比如DD/MM/YYYY),要对应调整格式。
  • 如果某个用户所有记录都晚于4月6日(比如示例里的Matt),两种方法都会自动排除他,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:23:16