Bigquery-UNION ALL具有相同参数的所有相同查询

时间:2020-10-27 11:18:37

标签: sql google-bigquery

我有一个非常大的查询,我想对所有相同的查询进行UNION,但要更改两个不同的参数。因此,为了使查询更具可读性,我想避免使用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())

因此,重点在于避免这种并集,使其可扩展以用于更多的并集,而只是更改间隔而无需创建数百行代码。

1 个答案:

答案 0 :(得分:2)

您可以这样写:

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