我有一个非常大的查询,我想对所有相同的查询进行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())
因此,重点在于避免这种并集,使其可扩展以用于更多的并集,而只是更改间隔而无需创建数百行代码。
答案 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
。