Google Sheets:如何使用Query或Filter返回匹配两列的最新记录
Google Sheets 按多字段唯一组合提取最新记录实现方案
方案1:内置函数实现(无需代码,适合小数据量)
- 适用前提:原始数据第一行为表头,包含
Location、Nb以及用于判断记录新旧的时间/自增ID字段,原始数据工作表名称为原始数据 - 操作步骤:
- 新建空白工作表作为结果输出表,第一行粘贴与原始表完全一致的表头
- 在结果表A2单元格输入如下公式,按回车即可自动生成所有符合要求的最新记录:
=FILTER(SORT('原始数据'!A2:Z, XMATCH("更新时间",'原始数据'!1:1,0), FALSE), COUNTIFS(SORT('原始数据'!A:A, XMATCH("更新时间",'原始数据'!1:1,0), FALSE), '原始数据'!A:A, SORT('原始数据'!B:B, XMATCH("更新时间",'原始数据'!1:1,0), FALSE), '原始数据'!B:B, SEQUENCE(ROWS('原始数据'!A2:A)), "<="&SEQUENCE(ROWS('原始数据'!A2:A)))=1)
- 参数调整说明:
- 将公式中的
'原始数据'替换为你自己的原始数据工作表名称 - 将
"更新时间"替换为你实际用于判断记录先后的字段名,如果用自增ID判断就替换为对应ID字段的名称 - 若原始数据列范围固定,可将
A2:Z替换为实际数据范围(如A2:Z2000),提升公式运算效率
- 将公式中的
方案2:Apps Script 自动化实现(适合大数据量,支持自动更新)
- 操作步骤:
- 打开目标Google表格,点击顶部菜单栏「扩展程序」-「Apps Script」进入脚本编辑器
- 删除编辑器内默认的示例代码,粘贴如下代码:
function extractLatestSupplyRecords() { const sheet = SpreadsheetApp.getActiveSpreadsheet(); // 下方配置项可根据实际情况修改 const CONFIG = { rawSheetName: "原始数据", resultSheetName: "最新物资记录", locationField: "Location", nbField: "Nb", orderField: "更新时间" } const rawSheet = sheet.getSheetByName(CONFIG.rawSheetName); let resultSheet = sheet.getSheetByName(CONFIG.resultSheetName); if (!resultSheet) resultSheet = sheet.insertSheet(CONFIG.resultSheetName); // 读取原始数据 const rawValues = rawSheet.getDataRange().getValues(); const header = rawValues.shift(); // 定位字段索引 const locIndex = header.indexOf(CONFIG.locationField); const nbIndex = header.indexOf(CONFIG.nbField); const orderIndex = header.indexOf(CONFIG.orderField); // 按时间倒序排序,保证最新记录在前 rawValues.sort((a, b) => new Date(b[orderIndex]) - new Date(a[orderIndex])); // 按Location+Nb唯一组合去重 const uniqueRecords = new Map(); rawValues.forEach(row => { const uniqueKey = `${row[locIndex]}||${row[nbIndex]}`; if (!uniqueRecords.has(uniqueKey)) { uniqueRecords.set(uniqueKey, row); } }) // 写入结果表 const outputData = [header, ...Array.from(uniqueRecords.values())]; resultSheet.clearContents(); resultSheet.getRange(1, 1, outputData.length, outputData[0].length).setValues(outputData); }
- 保存脚本项目,首次运行需要完成Google账号授权,授权后执行函数即可生成结果表
- 可在脚本编辑器的「触发器」页面配置自动触发规则,支持原始数据修改后自动更新结果表,无需手动执行
内容的提问来源于stack exchange,提问作者Michael Geiser
相关产品推荐
相关产品推荐

