google-bigquery - 访问 STRUCT 中的第 10 到第 70 个元素
问题描述
我有 3 个字段:用户名、tracking_id、时间戳。对于他在我的网站上执行的每项操作,一个用户将有多个行(有些行更多,有些行更少)具有不同的跟踪 ID 和时间戳。我想按用户名分组并获取该用户第 10 次到第 70 次操作的跟踪 ID。我在 BigQuery 上使用标准 SQL。
第一个问题是,我找不到访问 STRUCT 中范围的语法(例如,只有一行或使用限制来获取前/后 70 行)。然后,我可以在设法访问一个范围后进行映像,索引可能存在超出范围的问题,因为某些用户可能没有 70 或更多的操作。
SELECT
username,
ARRAY_AGG(STRUCT(tracking_id,
timestamp)
ORDER BY
timestamp
)[OFFSET (9 to 69)] #??????
FROM
table
结果应该是一个具有相同 3 个字段的表:用户名、tracking_id、时间戳,但它不应该包含所有用户的行,而应该只包含每个用户的第 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
推荐阅读
- ag-grid - 我可以有多个具有属性 cellRenderer 的 AgGrid 列,并且每个列都显示不同的详细嵌套列吗?
- python - Django APScheduler 作业挂断而没有错误
- python-3.x - 如何解析包含 csv 文件的 Http 请求
- javascript - jquery获取数据字段
- javascript - 使用 Angular 9 和 JS 扩展表时出错(新打开的行得到以前的值)?
- flutter - 盒内颤振制作盒
- excel - 循环遍历excel vba中的列
- javascript - 尝试获取文本框定义的值以产生一定数量的返回值
- python - Python 多处理进程类的问题
- java - 使用 Graphql 查询表单 java 发送 HTTP POST 请求