如何将Google Sheet中按GroupID分组的最新数据提取至另一表格
提取Google Sheet中每个GroupID的最新销售记录
问题背景
需要将Google Sheet中Detail表的最新销售信息提取到另一张表格:
- Detail表包含
GroupID、Name、Record #、Invoice #、Date列 - 每个Group对应多条不同日期的发票记录,目标是以
GroupID为唯一键,提取每个组的最新销售记录及对应日期到目标表的不同单元格
Detail表原始数据
| GroupID | Name | Record # | Invoice # | Date |
|---|---|---|---|---|
| 655-006 | John Doe | 736703 | 1 | 03/31/22 |
| 655-006 | John Doe | 540454 | 2 | 06/30/22 |
| 655-006 | John Doe | 195023 | 3 | 09/30/22 |
| 655-006 | John Doe | 325078 | 4 | 12/31/22 |
| 655-006 | John Doe | 390165 | 5 | 03/31/23 |
| 655-006 | John Doe | 416509 | 6 | 06/30/23 |
| 655-006 | John Doe | 473567 | 7 | 09/30/23 |
| 655-006 | John Doe | 411553 | 8 | 12/31/23 |
| 655-006 | John Doe | 532312 | 9 | 03/31/24 |
| 123-002 | Alex Smith | 438797 | 1 | 07/31/20 |
| 123-002 | Alex Smith | 190013 | 2 | 08/31/20 |
| 123-002 | Alex Smith | 314558 | 3 | 09/30/20 |
| 123-003 | Jane Doe | 663833 | 1 | 10/31/23 |
| 123-003 | Jane Doe | 630171 | 2 | 11/30/23 |
| 123-003 | Jane Doe | 951397 | 3 | 12/31/23 |
| 123-003 | Jane Doe | 445057 | 4 | 01/31/24 |
| 456-001 | Stephen Colbert | 916524 | 1 | 02/28/21 |
| 456-001 | Stephen Colbert | 719932 | 2 | 03/31/21 |
| 456-001 | Stephen Colbert | 852011 | 3 | 04/30/21 |
已尝试方法及问题
VLOOKUP+SORT:公式=VLOOKUP(G3,SORT($A:$E,5,false),5,false),可返回排序后的第一条记录,但依赖数据顺序与日期的一致性,无法精准匹配最新日期QUERY:公式=QUERY(A:E, "SELECT E WHERE A = '"&G:G&"'"),单GroupID查询结果正确,但无法批量处理多GroupIDLOOKUP:公式=LOOKUP(G3,A:E,E:E),单个GroupID的日期提取有效,但跨GroupID时会返回其他组的最新日期,匹配逻辑失效
已确认两张表GroupID格式完全一致(无文本/数字格式差异),问题核心在于批量匹配时的GroupID关联逻辑。
可行解决方案
方案1:单字段提取(目标表已存在GroupID)
如果目标表已列出要查询的GroupID(如G列),可使用以下公式提取对应字段:
提取最新日期
=XLOOKUP(G3,$A:$A,$E:$E,"",0,1,MAXIFS($E:$E,$A:$A,G3))
- 逻辑:先用
MAXIFS获取当前GroupID的最大日期,再通过XLOOKUP匹配对应记录
提取对应Record
=XLOOKUP(G3&MAXIFS($E:$E,$A:$A,G3),$A:$A&$E:$E,$C:$C,"")
- 逻辑:将GroupID与最大日期拼接成唯一键,匹配对应的Record #
方案2:批量生成所有Group的最新完整记录
如果要一次性生成所有唯一GroupID的最新完整记录(无需手动输入GroupID),在目标表空白单元格输入:
=ARRAYFORMULA(VLOOKUP(UNIQUE(Detail!A:A),SORT(Detail!A:E,5,FALSE),{1,2,3,4,5},FALSE))
- 逻辑:
UNIQUE(Detail!A:A):获取所有不重复的GroupIDSORT(Detail!A:E,5,FALSE):将Detail表按Date列降序排序,确保每个GroupID的最新记录排在最前面VLOOKUP:用唯一GroupID匹配排序后的表,返回对应组的第一条(最新)记录
方案3:QUERY+ARRAYFORMULA批量查询
=ARRAYFORMULA(QUERY(SORT(Detail!A:E,5,FALSE),"select Col1, Col2, Col3, Col4, Col5 group by Col1",0))
- 逻辑:先按日期降序排序,再通过
group by Col1保留每个GroupID的第一条记录(即最新记录)
内容的提问来源于stack exchange,提问作者Gina
相关产品推荐
相关产品推荐

