BigQuery:选择ARRAY类型字段为

时间:2019-03-03 08:18:16

标签: google-bigquery

我有一个包含3列的表:String,Datetime,ARRAY()。

Name  |       LastLogin       | FavoriteNumbers
Paul  | "2019-03-03T06:29:35" | (1, 3, 6, 8)
Paul  | "2019-03-03T02:29:35" | (1, 3, 6, 8)
Paul  | "2019-03-01T01:29:35" | (1, 3, 6, 8)
Anna  | "2019-03-03T02:29:35" | (1, 2, 3, 4)
Anna  | "2019-03-03T01:29:35" | (1, 2, 3, 4)
Maya  | "2019-03-02T10:29:35" | (9, 11, 13, 8)

这是我想要的结果:

Paul  | "2019-03-03T06:29:35" | (1, 3, 6, 8)
Anna  | "2019-03-03T02:29:35" | (1, 2, 3, 4)
Maya  | "2019-03-02T10:29:35" | (9, 11, 13, 8)

我尝试将GROUP BYARRAY_AGG一起使用,以获取每个名称的最新时间戳,但是它不起作用,因为GROUP BY不能用于ARRAY类型字段。

如何获得所需的结果?使用标准SQL。

1 个答案:

答案 0 :(得分:1)

使用ARRAY_AGG聚合为一个结构,然后提取字段:

SELECT
  Name,
  ARRAY_AGG(
    STRUCT(LastLogin, FavoriteNumbers)
    ORDER BY LastLogin DESC LIMIT 1
  )[OFFSET(0)].*
FROM dataset.table
GROUP BY Name