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

如何合并BigQuery中的两个SQL查询以省去多个视图的使用

合并后的SQL实现

方案1:与原有逻辑完全对齐的CTE写法

直接将生成id的逻辑封装为CTE替换原查询中的表即可,逻辑和你现有两个视图的计算规则完全一致:

WITH add_id_table AS (
  SELECT 
    *,  
    CONCAT(
      CAST(ga_sourcemedium AS string),   
      CAST(ga_campaign AS string),   
      CAST(ga_adcontent AS string),   
      CAST(ga_country AS string),   
      CAST(ga_region AS string), 
      CAST(ga_devicecategory AS string),   
      CAST(ga_date AS string)
    ) AS id
  FROM `table_name`
)
SELECT DISTINCT orders.*
FROM add_id_table orders
INNER JOIN (
  SELECT 
    id,
    MAX(_sdc_sequence) AS sequence
  FROM add_id_table
  GROUP BY id
) latest_orders
ON orders.id = latest_orders.id
AND orders._sdc_sequence = latest_orders.sequence

方案2:更简洁的窗口函数写法(BigQuery原生支持,性能更优)

用ROW_NUMBER窗口函数配合QUALIFY语法可以直接省略JOIN步骤,代码更简洁执行效率更高:

SELECT * EXCEPT(rn)
FROM (
  SELECT 
    *,  
    CONCAT(
      CAST(ga_sourcemedium AS string),   
      CAST(ga_campaign AS string),   
      CAST(ga_adcontent AS string),   
      CAST(ga_country AS string),   
      CAST(ga_region AS string), 
      CAST(ga_devicecategory AS string),   
      CAST(ga_date AS string)
    ) AS id,
    ROW_NUMBER() OVER(PARTITION BY id ORDER BY _sdc_sequence DESC) AS rn
  FROM `table_name`
)
WHERE rn = 1

如果是BigQuery最新版本还可以进一步简化为:

SELECT 
  *,  
  CONCAT(
    CAST(ga_sourcemedium AS string),   
    CAST(ga_campaign AS string),   
    CAST(ga_adcontent AS string),   
    CAST(ga_country AS string),   
    CAST(ga_region AS string), 
    CAST(ga_devicecategory AS string),   
    CAST(ga_date AS string)
  ) AS id
FROM `table_name`
QUALIFY ROW_NUMBER() OVER(PARTITION BY id ORDER BY _sdc_sequence DESC) = 1

注意事项

原生CONCAT函数只要拼接的任意一个字段为NULL,最终返回的id就会为NULL,如果你有字段可能为空的场景,建议替换为CONCAT_WS函数,用指定分隔符拼接同时自动跳过NULL值,示例:

CONCAT_WS('|', ga_sourcemedium, ga_campaign, ga_adcontent, ga_country, ga_region, ga_devicecategory, ga_date) AS id

不需要额外加CAST,CONCAT_WS会自动将字段转为字符串类型。

内容的提问来源于stack exchange,提问作者udis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:39:01