如何用Query函数获取各产品最新成本数据列表?
Google Sheets:提取每个产品的最新成本记录
问题场景
我有一份包含产品、日期和历史成本的列表,需要生成新列表,提取每个产品的最新成本记录。
原始数据
| 产品 | 日期 | 成本 |
|---|---|---|
| A | 07/02/2023 | 10.50 |
| A | 08/05/2023 | 11.20 |
| B | 09/02/2023 | 30.10 |
| B | 10/02/2023 | 30.30 |
期望输出
| 产品 | 日期 | 成本 |
|---|---|---|
| A | 08/05/2023 | 11.20 |
| B | 10/02/2023 | 30.30 |
尝试过的公式及问题
我使用了以下QUERY公式,但仅能获取全局最新日期对应的产品记录,无法覆盖所有产品:
=query(H4:J8;"SELECT H,I,J WHERE I = date '"&TEXTO(MAX(I4:I);"YYYY-MM-DD")"&'")
得到的结果仅包含B产品的最新记录,缺少A产品的条目。
解决方案
方法1:QUERY子查询匹配每组最大日期
通过子查询先获取每个产品的最大日期,再关联原始数据提取对应成本:
=QUERY(H4:J8; "SELECT H, MAX(I), J WHERE H IS NOT NULL GROUP BY H, J HAVING MAX(I) = (SELECT MAX(I) FROM H4:J8 WHERE H = Col1)")
方法2:FILTER+MAXIFS组合筛选
利用MAXIFS获取每个产品的最新日期,再用FILTER匹配对应行:
=FILTER(H4:J8; I4:I = MAXIFS(I4:I; H4:H; H4:H))
该公式会自动为每个产品筛选出对应最新日期的记录。
方法3:SORTN分组去重(保留每组最新记录)
先按日期降序排序,再用SORTN按产品分组,保留每组第一条记录(即最新日期的条目):
=SORTN(SORT(H4:J8; 2; FALSE); 9^9; 2; 1; TRUE)
SORT(H4:J8; 2; FALSE):将数据按日期列(第2列)降序排列,让每个产品的最新记录排在组内首位SORTN(..., 9^9, 2, 1, TRUE):按产品列(第1列)分组,每组保留1条记录
内容的提问来源于stack exchange,提问作者Matias Marcet
相关产品推荐
相关产品推荐

