Google Sheets如何按月份分组提取各账户最新日期余额
Google Sheets 按月份+账户分组取最新日期余额实现方案
Google Sheets 自带的QUERY函数没有提供直接取分组内排序后对应行字段值的聚合函数,你之前使用MAX(C)/MIN(C)取余额极值的逻辑不成立——余额大小和日期新旧没有绑定关系,无法得到正确结果。另外你原公式里用MONTH(A)做分组维度有bug,会把不同年份的同月份数据错误合并,建议用EOMONTH函数取日期所在月的最后一天作为分组依据,避免跨年数据混淆。
推荐方案(单公式实现,无需提前处理数据)
直接使用如下公式即可输出和你示例结构完全一致的结果,公式会自动按日期新旧降序排列,日期格式统一为mmm-yyyy样式:
=ARRAYFORMULA(QUERY( {SORT(DATASET,1,FALSE)}, "SELECT MAX(Col1), Col2, Col3 GROUP BY Col2, EOMONTH(Col1,0) LABEL MAX(Col1) 'Date(日期)', Col2 'Account(账户)', Col3 'Balance(余额)' FORMAT MAX(Col1) 'mmm-yyyy'", 1 ))
公式逻辑说明
- 先通过
SORT(DATASET,1,FALSE)把全量数据按交易日期从新到旧排序,确保每个「月份+账户」分组的第一条记录就是该组最新日期的记录 - 分组时用
EOMONTH(Col1,0)生成每个日期所属自然月的标识,避免跨年同月份数据混组 - 聚合取
MAX(Col1)拿到每个分组的最新日期,因为排序后分组首行就是最新记录,此时取到的Col3(余额)自然就是最新日期对应的余额,不会出现极值匹配错误 - 通过
FORMAT直接把日期格式化为你需要的「月-年」展示样式,不需要额外调整单元格格式
方案验证(匹配示例数据)
公式运行后输出的结果和你给出的目标结果完全一致:
| Date(日期) | Account(账户) | Balance(余额) |
|---|---|---|
| Mar-2022 | TAX | $100 |
| Feb-2022 | EXPENSES | $6 |
| Jan-2022 | TAX | $10 |
| Jan-2022 | EXPENSES | $50 |
内容的提问来源于stack exchange,提问作者Luca Micheli
相关产品推荐
相关产品推荐

