在Google Sheets中按日期范围和名称筛选并获取最后记录的最终金额
在Google Sheets中筛选后提取最后一行金额的方法
嘿,既然你有SQLite的使用经验,那理解Google Sheets里的解决方案应该会很顺畅!我给你整理了几种实用的方法,帮你实现按指定名称和日期范围筛选后,提取最后一行的最终金额:
方法1:用QUERY函数(最贴近SQL逻辑)
因为你熟悉SQL,QUERY函数的语法和SQL非常相似,上手几乎零成本。假设你的数据结构是:
- A列:日期(格式需为Google Sheets可识别的日期格式)
- B列:名称
- D列:最终金额
你可以用这个公式:
=INDEX(QUERY(A:D, "SELECT D WHERE B = 'Sandeep' AND A >= date '2016-01-01' AND A <= date '2016-11-06' ORDER BY A DESC LIMIT 1"), 1)
逻辑解释:
QUERY部分就像SQL语句:筛选名称为'Sandeep'、日期在指定范围内的记录,按日期倒序排列后取第一条(也就是最后一条符合条件的记录)INDEX(...,1)是把QUERY返回的数组结果转换成单个单元格值,避免出现数组溢出的情况
方法2:用INDEX+FILTER组合(直观易懂)
如果更喜欢用基础函数组合,INDEX+FILTER的搭配也很实用,而且新版本Google Sheets支持负索引,简化了操作:
=INDEX(FILTER(D:D, B:B="Sandeep", A:A>=DATE(2016,1,1), A:A<=DATE(2016,11,6)), -1)
逻辑解释:
FILTER先筛选出所有符合名称和日期范围的金额数据,返回一个数组INDEX(..., -1)直接取这个数组的最后一个元素,也就是最后一行的金额
如果你的Google Sheets版本不支持负索引,可以用COUNTA统计筛选结果的行数,再作为索引:
=INDEX(FILTER(D:D, B:B="Sandeep", A:A>=DATE(2016,1,1), A:A<=DATE(2016,11,6)), COUNTA(FILTER(D:D, B:B="Sandeep", A:A>=DATE(2016,1,1), A:A<=DATE(2016,11,6))))
方法3:用XLOOKUP函数(高效简洁)
XLOOKUP是Google Sheets的新函数,功能强大,适合快速实现复杂匹配:
=XLOOKUP(1, (B:B="Sandeep")*(A:A>=DATE(2016,1,1))*(A:A<=DATE(2016,11,6)), D:D, , 0, -1)
逻辑解释:
- 第二个参数
(B:B="Sandeep")*(A:A>=DATE(2016,1,1))*(A:A<=DATE(2016,11,6)):三个条件相乘,只有当所有条件都满足时结果为1 - 最后一个参数
-1表示从后往前搜索,找到的第一个匹配项就是最后一行的记录,直接返回对应的金额
注意事项:
- 请根据你实际的列位置调整公式中的列标(比如如果日期在C列、金额在E列,就把A改成C、D改成E)
- 确保日期列是Google Sheets可识别的日期格式,避免筛选出错
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

