首页 > 解决方案 > Google表格中的查询功能-根据另一列获取一列中的非空最后一个单元格

问题描述

我需要根据相邻列的更改来检索列中的最后一个非空单元格。

在下面的示例中,黄色单元格是我的目标。它们由 A 列中的更改定义。

点击这里查看示例

如图所示,我已经设法使用正常功能做到这一点:

=INDEX(ArrayFormula(FILTER(B2:B20,A2:A20=D2)),ArrayFormula(MATCH(0, FILTER(B2:B20,A2:A20=D2),-1)),1)

我现在需要使用查询功能来完成它,因为结果必须随着导入范围的增长而自动更新。

到目前为止,这是可行的 - 但我仍然需要在 A 列上创建适当的依赖关系:

=QUERY(A2:B20, "select A, B where B is not null limit 1 offset "&(COUNT(A2:B20)-1))

像这样: 单击此处查看示例

提前感谢您的任何建议!

PS:在此处使用 Player0 提供的解决方案来处理我的真实数据: 单击此处 我无法通过第一列“取消排序”,设置sort_column为 0 不起作用。基本上我需要始终保持 A 列中元素的顺序相同 - 显然 SORTN 无法做到这一点。

要将其应用于主要示例 - 如果 A 列由 a、c、d、b(而不是 a、b、c、d)组成,我将不得不保留它。

标签: sqlfunctiongoogle-sheets

解决方案


您的任务可以分两步完成:

  1. 确定包含所需数据的行 =index(query({A2:B20,ROW(A2:B20)},"select max(Col3) where Col2 is not null group by Col1 label max(Col3)''")) 并使用公式将结果组装成正则表达式JOIN("|", -- query result --) 在此处输入图像描述 结果我们有一个字符串:5|11|14|19
  1. 使用新查询从先前找到的行中输出值=index(query({A2:B20,ROW(A2:B20)},"select Col1,Col2 where Col3 matches '"& join("|",query({A2:B20,ROW(A2:B20)},"select max(Col3) where Col2 is not null group by Col1 label max(Col3)''")) &"'")) 在此处输入图像描述

该范围A2:B20用于示例,但该公式也适用于开放范围A2:B


推荐阅读