You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Google Sheets QUERY函数,仅返回Tag列相邻值相同的行?

解决方案

要实现仅返回B列(Tag列)当前行与下一行值相同、且L列为TRUE的A、C、L列数据,仅靠QUERY函数无法直接完成相邻行比较,需要结合FILTER、ARRAYFORMULA和OFFSET(或更简洁的LET函数)来实现,以下是两种可行写法:

方法1:使用LET函数简化逻辑(推荐)

=LET(
    filtered_data, QUERY(Database!A:L,"SELECT A,B,C,L WHERE L=TRUE",1),
    tag_column, INDEX(filtered_data,,2),
    match_condition, tag_column=OFFSET(tag_column,1,0),
    result_rows, FILTER(filtered_data, match_condition),
    CHOOSECOLS(result_rows, 1, 3, 4)
)

逻辑说明:

  1. filtered_data:先通过原QUERY筛选出所有L列为TRUE的行,同时保留B列用于后续判断
  2. tag_column:提取筛选结果中的B列(Tag列)
  3. match_condition:用OFFSET获取下一行的Tag值,对比当前行与下一行是否相等
  4. result_rows:过滤出满足相邻Tag相等的行
  5. CHOOSECOLS:从结果中仅保留A、C、L列(对应第1、3、4列)

方法2:嵌套QUERY+FILTER(兼容旧版Sheets)

如果你的Sheets版本不支持LET函数,可以用以下写法:

=ARRAYFORMULA({
    "A列标题","C列标题","L列标题";
    FILTER(QUERY(Database!A2:L,"SELECT A,C,L WHERE L=TRUE",0), 
           INDEX(QUERY(Database!A2:L,"SELECT B WHERE L=TRUE",0),,1)=OFFSET(INDEX(QUERY(Database!A2:L,"SELECT B WHERE L=TRUE",0),,1),1,0))
})

逻辑说明:

  1. 外层ARRAYFORMULA用于组合表头和数据行
  2. 内层第一个QUERY提取L=TRUE的A、C、L列数据(跳过表头从A2开始)
  3. 内层第二个QUERY提取对应行的B列数据,用OFFSET对比相邻行Tag是否相等
  4. FILTER仅保留满足Tag相等条件的行,最后加上自定义表头

注意事项:

  • 最后一行数据因为没有下一行,会自动被排除,无需额外处理
  • 确保Database!A:L范围包含所有需要处理的数据,避免遗漏行

内容的提问来源于stack exchange,提问作者Gustavo Felippe de Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:55:13