在BigQuery中,你可以使用LAST_VALUE
函数与ARRAY_AGG
函数结合使用来实现对数组中最后一个元素的访问。以下是一个示例代码:
WITH data AS (
SELECT 1 AS id, ['apple', 'banana', 'cherry'] AS fruits UNION ALL
SELECT 2 AS id, ['orange', 'grape', 'mango'] AS fruits
)
SELECT id, fruits,
LAST_VALUE(fruit) OVER(PARTITION BY id ORDER BY fruit_index ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_fruit
FROM (
SELECT id, fruits, fruit, ROW_NUMBER() OVER(PARTITION BY id ORDER BY fruit_index DESC) AS fruit_index
FROM data, UNNEST(fruits) AS fruit WITH OFFSET fruit_index
)
WHERE fruit_index = 1
在这个示例中,我们首先创建了一个名为data
的CTE(常表达式),其中包含了两行数据。每行数据包含一个id
和一个fruits
数组。然后,我们使用UNNEST
函数将数组展开,并为每个元素添加一个fruit_index
偏移量。接下来,我们使用ROW_NUMBER
函数为每个元素分配一个唯一的行号,并根据fruit_index
降序进行排序。最后,我们使用LAST_VALUE
函数来获取每个id
分组中的最后一个元素,通过PARTITION BY id
和ORDER BY fruit_index
来定义分组和排序规则。
输出结果将包含每个id
的最后一个水果。