BigQuery多列IN子查询报错:子查询仅允许单个输出列求助
解决方案:BigQuery获取每个客户最新表后缀的数据
你的查询逻辑没问题,但BigQuery的IN子查询不支持多列匹配,因此触发报错。以下两种可行方案可实现需求:
方案1:使用窗口函数(推荐)
窗口函数可直接在原数据集上标记每个客户的最新后缀行,无需额外关联,性能更优:
WITH latest_records AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_code ORDER BY _TABLE_SUFFIX DESC) AS rn FROM `tlp-dataplatform-prod.published_kpi.UCV*` ) SELECT * EXCEPT(rn) FROM latest_records WHERE rn = 1
- 逻辑说明:按
customer_code分区,给每个分区内的行按_TABLE_SUFFIX降序编号,最新后缀的行编号为1,最后筛选出编号为1的行即可。
方案2:使用JOIN关联子查询
通过子查询获取每个客户的最大后缀,再与原表关联匹配:
SELECT t.* FROM `tlp-dataplatform-prod.published_kpi.UCV*` t JOIN ( SELECT customer_code, MAX(_TABLE_SUFFIX) AS max_suffix FROM `tlp-dataplatform-prod.published_kpi.UCV*` GROUP BY customer_code ) s ON t.customer_code = s.customer_code AND t._TABLE_SUFFIX = s.max_suffix
- 逻辑说明:子查询先计算每个客户对应的最大
_TABLE_SUFFIX,再通过JOIN匹配原表中客户代码和后缀都一致的行,得到目标数据。
内容的提问来源于stack exchange,提问作者Valerio Auricchio
相关产品推荐
相关产品推荐

