Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 访问结构中的第10到第70个元素_Google Bigquery - Fatal编程技术网

Google bigquery 访问结构中的第10到第70个元素

Google bigquery 访问结构中的第10到第70个元素,google-bigquery,Google Bigquery,我有3个字段:用户名、跟踪id、时间戳。一个用户在我的网站上所做的每一个操作都会有多行(有些行多,有些行少),带有不同的跟踪ID和时间戳。我想按用户名分组,并获取该用户第10次到第70次操作的跟踪ID。我在BigQuery上使用标准SQL 第一个问题是,我找不到访问结构中某个范围的语法(例如,仅一行或使用限制来获取第一行/最后70行)。然后,我可以在设法访问一个范围后进行镜像,可能会出现索引超出范围的问题,因为一些用户可能没有70个或更多操作 SELECT username, ARRAY

我有3个字段:用户名、跟踪id、时间戳。一个用户在我的网站上所做的每一个操作都会有多行(有些行多,有些行少),带有不同的跟踪ID和时间戳。我想按用户名分组,并获取该用户第10次到第70次操作的跟踪ID。我在BigQuery上使用标准SQL

第一个问题是,我找不到访问结构中某个范围的语法(例如,仅一行或使用限制来获取第一行/最后70行)。然后,我可以在设法访问一个范围后进行镜像,可能会出现索引超出范围的问题,因为一些用户可能没有70个或更多操作

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