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

使用Google Sheets Query获取数据行的最大日期

解决Google Sheets Query提取特定名称最新数据(含F列)的问题

我完全明白你遇到的这个痛点——用Google Sheets Query处理最新数据的时候,一旦涉及到非聚合的列,很容易碰到这种要么报错要么带出多余数据的问题。先帮你还原场景,再拆解原因,最后给出可行的解决方案。

场景还原

先假设你的原始数据是这样的(A到F列):

NameDateColCColDColEColF
Mark4/1/17100200300X
Mark5/1/17150250350Y
Sarah3/1/17400500600Z
Sarah6/1/17450550650W

你的期望输出是每个Name对应最新Date的整行数据(包含F列):

NameDateColCColDColEColF
Mark5/1/17150250350Y
Sarah6/1/17450550650W

问题原因拆解

你之前遇到的两个问题,本质是Google Sheets Query的GROUP BY规则导致的:

  1. 当你把F列加入SELECT但没放进GROUP BY时,Query会报错——因为SQL逻辑要求:所有未使用聚合函数(比如max()、min())的列,必须出现在GROUP BY子句里。F列没有被聚合,所以必须加入分组,否则Query不知道该如何处理同一组内的不同F值。
  2. 如果你把F列加入GROUP BY,那么分组逻辑会变成「Name + F列值」的组合。Mark的两行F列分别是X和Y,属于不同的分组,所以都会被保留,这就违背了你只留最新日期行的需求。

可行解决方案

这里给你两种常用的解决思路,都能完美获取包含F列的最新行数据:

方法1:用VLOOKUP+SORT快速实现

这种方法无需复杂的Query逻辑,利用排序+查找的组合,直接定位每个Name的最新行:

=ARRAYFORMULA(VLOOKUP(UNIQUE(A2:A), SORT(A:F, 2, FALSE), {1,2,3,4,5,6}, FALSE))
  • 解释:
    1. SORT(A:F, 2, FALSE):把原始数据按Date列(第2列)降序排列,这样每个Name的最新行会排在最前面;
    2. UNIQUE(A2:A):提取所有不重复的Name;
    3. VLOOKUP:找到每个Name在排序后数据里的第一个匹配项,也就是最新日期的行,返回所有6列的数据。

方法2:用Query子查询实现更灵活的筛选

如果你更习惯用Query,可以结合子查询先获取每个Name的最新日期,再关联原数据筛选出对应行:

=QUERY(A:F, "select * where (A,B) in (select A, max(B) from A:F group by A)", 1)
  • 解释:
    1. 子查询select A, max(B) from A:F group by A:先获取每个Name对应的最大(最新)Date;
    2. 主查询select * where (A,B) in (...):筛选出Name和Date同时匹配子查询结果的行,这样就能得到每个Name最新日期的完整行,包括F列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:15:33