首页 > 解决方案 > 从 bigquery 中的未嵌套行创建一个数组

问题描述

您好,我有一组数据如下:

基础数据集

我的 id 从 1 到 6。
对于 id 从 2 到 6 的行,必须有一个具有相同时间戳的条目。

我创建了这个请求:

SELECT  t.timestamp, t.id, v.id FROM `myproject.mydataset.mytable` as t CROSS JOIN `myproject.mydataset.mytable` as v WHERE v.id <> t.id AND v.timestamp = t.timestamp AND t.id =2 ORDER BY t.timestamp

它给了我这个输出:

查询结果

我们可以看到,当时间戳相同时,我得到了一行将 id 从 3 到 6 附加到 id 2 的行。我想要实现的是按时间戳仅返回 1 行,并且在“id_1”列中有一个带有 [3,4,5,6] 的数组。

我看到有一个 NEST() 函数,但我无法使用它。

谢谢 :)

标签: sqlgoogle-bigquerynested

解决方案


如果我理解正确,您正在描述ARRAY_AGG()

SELECT t.timestamp, t.id, ARRAY_AGG(v.id)
FROM `myproject.mydataset.mytable` t JOIN 
     `myproject.mydataset.mytable` v
     ON v.timestamp = t.timestamp
WHERE v.id <> t.id AND t.id = 2
GROUP BY t.timestamp, t.id
ORDER BY t.timestamp

推荐阅读