【发布时间】:2021-01-05 16:50:42
【问题描述】:
我需要以 1 分钟的间隔对数据进行分组,以进行操作链。我的数据如下所示:
id MetroId Time ActionName refererurl
111 a 2020-09-01-09:19:00 First www.stackoverflow/a12345
111 b 2020-09-01-12:36:54 First www.stackoverflow/a12345
111 f 2020-09-01-12:36:56 First www.stackoverflow/xxxx
111 b 2020-09-01-12:36:58 Midpoint www.stackoverflow/a12345
111 f 2020-09-01-12:37:01 Midpoint www.stackoverflow/xxx
111 b 2020-09-01-12:37:03 Third www.stackoverflow/a12345
111 b 2020-09-01-12:37:09 Complete www.stackoverflow/a12345
222 d 2020-09-01-15:17:44 First www.stackoverflow/a2222
222 d 2020-09-01-15:17:48 Midpoint www.stackoverflow/a2222
222 d 2020-09-01-15:18:05 Third www.stackoverflow/a2222
我需要获取具有以下条件的数据:如果x_id 和x_url 的action_name 列具有Complete 值,则获取该值。如果没有Complete,则抓取Third,依此类推。
ARRAY_AGG(current_query_result
ORDER BY CASE ActionName
WHEN 'Complete' THEN 1
WHEN 'Third' THEN 2
WHEN 'Midpoint' THEN 3
WHEN 'First' THEN 4
END
LIMIT 1
)[OFFSET(0)]
FROM
(
SELECT d.id, c.Time, c.ActionName, c.refererurl, c.MetroId
FROM
`bq_query_table_c` c
INNER JOIN `bq_table_d` d ON d.id = c.CreativeId
WHERE
c.refererurl LIKE "https://www.stackoverflow/%"
AND c.ActionName in ('First', 'Midpoint', 'Third', 'Complete')
) current_query_result
GROUP BY
id,
refererurl,
MetroId
TIMESTAMP_SUB(
PARSE_TIMESTAMP('%Y-%m-%d-%H:%M:%S', time),
INTERVAL MOD(UNIX_SECONDS(PARSE_TIMESTAMP('%Y-%m-%d-%H:%M:%S', time)), 1 * 60)
SECOND
)
期望的输出:
id MetroId Time ActionName refererurl
111 a 2020-09-01-09:19:00 First www.stackoverflow/a12345
111 f 2020-09-01-12:37:01 Midpoint www.stackoverflow/xxx
111 b 2020-09-01-12:37:09 Complete www.stackoverflow/a12345
222 c 2020-09-01-15:18:05 Third www.stackoverflow/a2222
【问题讨论】:
-
例如,如果每 50 秒有 10 个动作(所以总共 10x50=500 秒),它被视为一个组,应该采取该组中的最后一个动作 - 对吗?请进一步确认或澄清
-
正确,有 4 个动作,每个动作持续约 5 秒。所有 4 个通常不超过一分钟。并且这 4 个动作被视为一组。同一 id 可以同时发生多个操作,但我为此添加了额外的分组。对不起,如果我让你更困惑......
-
说实话 - 我仍然不清楚 - 您应该提供更好的输入和输出数据示例,其中包含更多组和更多操作,因此答案将真正解决您的用例而不是当前您的问题中非常简化的示例。对我来说,问题是对于解释你问题的不同方式——我会有不同的答案——但我不想为了回答而在空中开枪——我想首先真正了解你的情况
标签: sql google-bigquery greatest-n-per-group window-functions gaps-and-islands