我有一个包含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 BY
与ARRAY_AGG
一起使用,以获取每个名称的最新时间戳,但是它不起作用,因为GROUP BY
不能用于ARRAY类型字段。
如何获得所需的结果?使用标准SQL。
答案 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