【发布时间】:2020-02-26 21:33:00
【问题描述】:
我有一个时间序列(userid, timestamp),我想确定会话。
会话在用户级别由 5 分钟的固定窗口定义,该窗口从不在前一个会话中的每个新行开始(窗口持续时间理想情况下取决于给定用户的先前行数,但现在我可以忍受固定的窗口持续时间)例如
WITH sample AS (
SELECT 0 user_id, TIMESTAMP('2020-01-01T00:00:00Z') timestamp UNION ALL -- new session
SELECT 1, TIMESTAMP('2020-01-01T00:00:00Z') UNION ALL -- new session
SELECT 1, TIMESTAMP('2020-01-01T00:04:00Z') UNION ALL
SELECT 1, TIMESTAMP('2020-01-01T00:06:00Z') UNION ALL -- new session
SELECT 1, TIMESTAMP('2020-01-01T00:10:00Z') UNION ALL
SELECT 1, TIMESTAMP('2020-01-01T00:11:00Z') UNION ALL -- new session
SELECT 1, TIMESTAMP('2020-01-01T01:00:00Z') -- new session
)
SELECT *
FROM sample;
我被卡住了,因为在我的推理中,确定一行是否启动新会话取决于前几行的“新会话”列值。
我的目标是 BigQuery,因此理想情况下它应该可以在 BQ 语法中使用。
感谢任何帮助/提示!
【问题讨论】:
标签: sql google-bigquery