【问题标题】:Bigquery - UNION ALL same query with different parametersBigquery - UNION ALL 具有不同参数的相同查询
【发布时间】:2026-02-06 14:15:01
【问题描述】:

我有一个非常大的查询,我想联合所有相同的查询,但更改两个不同的参数。因此,为了使查询更具可读性,我想避免使用 UNION ALL。这是一个简短的例子(废话,但它给出了一个想法) 我所拥有的:

SELECT DISTINCT Name,'7 days' FROM T WHERE DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND CURRENT_DATE())
UNION ALL
SELECT DISTINCT Name, '14 DAYS' FROM T WHERE DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY) AND CURRENT_DATE())

所以重点是避免这种联合并使其可扩展以适应更多联合,只需更改间隔而不创建数百行代码。

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    你可以这样写:

    SELECT DISTINCT Name, CONCAT(d, ' days')
    FROM T JOIN
         (UNNEST(ARRAY[7, 14]) d
         ON DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL d DAY) AND CURRENT_DATE())
    

    这个查询基本上是无意义的,因为它只是在每个时间段重复最近的名字。

    但关键的想法是 UNNEST() 一个包含您想要的值的数组,然后使用 JOIN 而不是 WHERE

    【讨论】: