sql - 计算 BigQuery 中时间戳之间的平均延迟
问题描述
我的数据大致有以下结构:
client_id | visit_number | session_start_time | hit_count
我目前正在使用:
SELECT client_id, visit_number, SUM(hit_count) OVER (PARTITION BY client_id ORDER BY visit_number),
session_start_time - LAG(session_start_time) OVER (PARTITION by client_id ORDER BY visit_number)
FROM session_table
理想情况下,我希望获得客户点击次数的滚动总和(这似乎工作正常)。连续会话之间的平均增量也很方便。希望我为当前会话计算一个增量的方法是正确的,但我不确定计算平均增量的合理方法。
一个想法是将上面的查询包装到 CTE 中,然后在另一个窗口函数中计算平均值,但我相信它可以在一个查询中完成。
解决方案
如果您想要会话之间的平均时间到本次会话,那么您可以通过将当前时间减去第一次并除以小于会话数的时间来计算它:
SELECT client_id, visit_number,
SUM(hit_count) OVER (PARTITION BY client_id ORDER BY visit_number),
session_start_time - LAG(session_start_time) OVER (PARTITION by client_id ORDER BY visit_number) as delta,
(session_start_time -
MIN(session_start_time) OVER (PARTITION by client_id)
) / NULLIF(ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY session_start_time) - 1, 0) as avg_delta
FROM session_table;
推荐阅读
- bash - 将文件从服务器上传到工件
- node.js - 如何使用 Puppeteer 将(长)文本从剪贴板粘贴到 Textarea
- cmake - 将一个项目链接到另一个 CMAKE
- javascript - node-sass fstream 和 tar 依赖漏洞
- xpath - 通过使用 XPath 创建的响应进行解析
- reactjs - 如何将变量传递给子类并在 React 中更改它?
- spring-mvc - 如何将bean的属性值设置为从另一个类的方法返回的值?
- javascript - 如何创建 div 以在单击时向左/向右更改幻灯片图像?
- c# - 有没有办法让我使用文件处理“动态”更改数据集的“数据源”?
- python-3.x - Pandas:如何根据其他 2 列的增量和连续属性来增加新列?