Google Sheets如何合并6列数字日期为带最新日期的两列并动态更新
Google Sheets三对编号-日期列动态合并的实现方案
需求描述
原始数据为连续6列,列顺序按「编号、日期」重复3组排布,需要生成2列动态结果:
- 自动提取全表所有出现过的唯一编号,随源数据增删改自动同步
- 匹配每个编号关联的所有日期中数值最大(最新)的记录值,源数据变动时自动重算
原始示例数据:
| 编号 | 日期 | 编号 | 日期 | 编号 | 日期 |
|---|---|---|---|---|---|
| 1 | 1/12/21 | 2 | 2/20/21 | 3 | 3/5/21 |
| 2 | 2/12/21 | 3 | 2/27/21 | 4 | 4/1/21 |
| 3 | 1/15/20 | 4 | 1/20/21 | 1 | 3/30/21 |
| 4 | 1/4/21 | 1 | 2/25/21 | 2 | 4/2/21 |
预期输出效果:
| 编号 | 日期 |
|---|---|
| 1 | 3/30/21 |
| 2 | 4/2/21 |
| 3 | 3/5/21 |
| 4 | 4/1/21 |
原有尝试的偏差点
- 公式
=query('scba fill practise'!A:G,"select A, max(G) group by A")仅覆盖了第一组的编号列、第三组后方的空列,完全遗漏了中间两组配对数据,无法计算所有记录对应的最新日期 - 公式
=UNIQUE({A3:A;C3:C;E3:E})仅完成了唯一编号的提取,没有关联每个编号对应的日期匹配逻辑,无法生成完整的两列结果
可直接落地的实现公式
在结果区域的首个单元格输入以下单公式,即可一次性生成全部动态结果,无需拆分多列计算:=QUERY({A:B;C:D;E:F}, "select Col1, max(Col2) where Col1 is not null group by Col1 order by Col1 label Col1 '编号', Col2 '日期'", 0)
公式运行逻辑
- 通过数组纵向拼接语法
{A:B;C:D;E:F},将横向排布的3组「编号-日期」列合并为统一的两列数据集,全程不需要使用CONCATENATE函数 - 嵌套QUERY函数对拼接后的统一数据集做聚合计算:按编号分组提取每个分组下的最大日期值,同时过滤空单元格、按编号升序排列、自动匹配表头名称
- 公式引用全列范围,源数据的新增、修改、删除操作会自动触发结果重算,完全满足动态更新要求
调整提示
- 如果原表存在固定表头行,需要将公式内的全列范围替换为实际数据起始行(例如数据从第2行开始则写为
A2:B;C2:D;E2:F),避免表头内容被纳入聚合计算 - 若日期列计算结果异常,需要提前将对应列的单元格格式设置为「日期」类型,确保所有日期值可被识别为可计算的数值格式
内容的提问来源于stack exchange,提问作者Marques Willey
相关产品推荐
相关产品推荐

