Google bigquery 访问结构中的第10到第70个元素
我有3个字段:用户名、跟踪id、时间戳。一个用户在我的网站上所做的每一个操作都会有多行(有些行多,有些行少),带有不同的跟踪ID和时间戳。我想按用户名分组,并获取该用户第10次到第70次操作的跟踪ID。我在BigQuery上使用标准SQL 第一个问题是,我找不到访问结构中某个范围的语法(例如,仅一行或使用限制来获取第一行/最后70行)。然后,我可以在设法访问一个范围后进行镜像,可能会出现索引超出范围的问题,因为一些用户可能没有70个或更多操作Google bigquery 访问结构中的第10到第70个元素,google-bigquery,Google Bigquery,我有3个字段:用户名、跟踪id、时间戳。一个用户在我的网站上所做的每一个操作都会有多行(有些行多,有些行少),带有不同的跟踪ID和时间戳。我想按用户名分组,并获取该用户第10次到第70次操作的跟踪ID。我在BigQuery上使用标准SQL 第一个问题是,我找不到访问结构中某个范围的语法(例如,仅一行或使用限制来获取第一行/最后70行)。然后,我可以在设法访问一个范围后进行镜像,可能会出现索引超出范围的问题,因为一些用户可能没有70个或更多操作 SELECT username, ARRAY
SELECT
username,
ARRAY_AGG(STRUCT(tracking_id,
timestamp)
ORDER BY
timestamp
)[OFFSET (9 to 69)] #??????
FROM
table
结果应该是一个具有相同3个字段的表:username、tracking\u id、timestamp,但它不应该包含所有用户的行,而应该只包含每个用户的第10到第70行。下面是BigQuery标准SQL
#standardSQL
SELECT username,
ARRAY_AGG(STRUCT(tracking_id, `timestamp`) ORDER BY `timestamp`) AS selected_actions
FROM (
SELECT * EXCEPT(pos) FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY username ORDER BY `timestamp`) pos
FROM `project.dataset.table`
)
WHERE pos BETWEEN 10 AND 70
)
GROUP BY username