如何查询MS Access中每组记录的最新更新数据?
解决MS Access中获取每个file_number最新记录的问题
问题原因
你之前的SQL无法过滤旧记录,核心原因是将唯一标识unique_id和value加入了GROUP BY。因为unique_id是每行唯一的,分组后每条记录都会成为独立分组,MAX(filing_date)只能返回当前行的日期,完全起不到筛选同一file_number下最新记录的作用。
解法一:子查询关联(通用写法)
先通过子查询找出每个file_number对应的最新filing_date,再关联原表获取完整的记录信息:
SELECT t.unique_id, t.name, t.file_number, t.filing_date AS last_date, t.value FROM [table] t INNER JOIN ( -- 子查询:获取每个file_number的最新日期 SELECT file_number, MAX(filing_date) AS max_filing_date FROM [table] WHERE form_type = "update" GROUP BY file_number ) latest ON t.file_number = latest.file_number AND t.filing_date = latest.max_filing_date WHERE t.form_type = "update"
注意:如果你的表名是
table这类SQL关键字,必须用方括号[table]包裹,避免Access语法报错。
解法二:使用TOP 1 WITH TIES(Access专属简化写法)
MS Access支持TOP 1 WITH TIES语法,能直接返回每个分组的最新记录,写法更简洁:
SELECT TOP 1 WITH TIES unique_id, name, file_number, filing_date AS last_date, value FROM [table] WHERE form_type = "update" -- 先按file_number分组,再按日期倒序,确保最新记录排在前面 ORDER BY file_number, filing_date DESC
这个语句的逻辑是:按file_number分组,每组内按filing_date降序排列,TOP 1 WITH TIES会返回所有与每组第一条(最新日期)排序键一致的记录,也就是每个file_number的最新更新记录。
内容的提问来源于stack exchange,提问作者Dave M
相关产品推荐
相关产品推荐

