如何按两列组合筛选数据并保留第三列的最新日期记录?
按组合列筛选并返回最新日期记录的Query方案
需求说明
需要基于**颜色(B列)和类型(C列)的组合匹配,返回每组对应的最新日期(A列)**记录。比如示例中“白色-马”组合仅保留日期为2/1/25的最新条目。
原始Query语句
=Query(Submissions, "select G, D, E, F, C, B where 1=1 and G is not null "&IF(C2="All",""," AND D = ('"&C2&"')")&IF(C3="All",""," AND C = ('"&C3&"')")&IF(1=1," order by G asc",""), -1)
适配需求的修改方案
核心思路
先通过内层Query提取每个颜色-类型组合对应的最新日期,再在外层Query中筛选出匹配这些日期的完整记录,同时保留原Query的筛选条件(C2/C3的“All”筛选)和排序规则。
修改后的Query公式
=QUERY(Submissions, "select G,D,E,F,C,B,A where A matches '"&TEXTJOIN("|",TRUE,QUERY(Submissions, "select max(A) where 1=1 "&IF(C2="All",""," AND B = '"&C2&"'")&IF(C3="All",""," AND C = '"&C3&"'")&" group by B,C",0))&"' "&IF(C2="All",""," AND B = '"&C2&"'")&IF(C3="All",""," AND C = '"&C3&"'")&" order by G asc", -1)
公式解释
- 内层Query:根据C2(颜色筛选)、C3(类型筛选)的条件,按颜色(B)和类型(C)分组,提取每组的最大日期(即最新日期)。
- TEXTJOIN拼接:将内层Query得到的所有最新日期拼接成正则匹配格式,供外层Query筛选使用。
- 外层Query:筛选出日期匹配最新日期的记录,保留你需要的G、D、E、F、C、B列,并按原需求的G列升序排序。
示例效果
输入数据:
| 日期(A) | 颜色(B) | 类型(C) |
|---|---|---|
| 1/1/25 | 白色 | 马 |
| 2/1/25 | 白色 | 马 |
| 1/1/25 | 蓝色 | 马 |
| 1/2/25 | 蓝色 | 狗 |
执行公式后返回(核心列展示):
| 颜色(B) | 类型(C) | 日期(A) |
|---|---|---|
| 白色 | 马 | 2/1/25 |
| 蓝色 | 马 | 1/1/25 |
| 蓝色 | 狗 | 1/2/25 |
内容的提问来源于stack exchange,提问作者user30812313
相关产品推荐
相关产品推荐

