在 Bigquery 中按用户计算登录之间的时间
Posted
技术标签:
【中文标题】在 Bigquery 中按用户计算登录之间的时间【英文标题】:Calculate Time Between Logins by User in Bigquery 【发布时间】:2021-02-24 00:18:14 【问题描述】:我正在尝试按用户计算 BigQuery 中 2 个登录事件之间的时间差。我想了解每个用户登录之间需要多长时间。
我尝试过以下查询:
Select user_id, timestamp,
timestamp_diff(timestamp, (lag(timestamp)over (partition by user_id order by timestamp), minute)) as
time_diff
from table
order by user_id, timestamp
样本数据
user_id | event | timestamp |
---|---|---|
aaa | Login | 2021-02-20 00:00:00 UTC |
bbb | Login | 2021-02-20 00:02:00 UTC |
aaa | Login | 2021-02-20 00:01:00 UTC |
ccc | Login | 2021-02-20 00:02:00 UTC |
aaa | Login | 2021-02-20 00:01:00 UTC |
aaa | Login | 2021-02-20 00:50:00 UTC |
bbb | Login | 2021-02-20 00:13:00 UTC |
ccc | Login | 2021-02-20 00:46:00 UTC |
我的结果应该是一列,其中包含当前登录事件和上一个登录事件之间的时间,第一个事件是NULL
。
【问题讨论】:
请包括期望输出和您当前的输出。 你的代码有什么问题? 【参考方案1】:您的查询中有额外的括号。所以,写对了:
Select user_id, timestamp,
timestamp_diff(timestamp,
lag(timestamp) over (partition by user_id order by timestamp),
minute
) as time_diff
from table
order by user_id, timestamp;
您可能还想添加过滤器where event = 'Login'
。
【讨论】:
【参考方案2】:括号似乎实际上是导致问题的原因
当查询不那么混乱时,更容易发现这种类型的“错误”
考虑下面的例子
Select user_id, timestamp,
timestamp_diff(timestamp, lag(timestamp) over win, minute) as time_diff
from `project.dataset.table`
window win as (partition by user_id order by timestamp)
order by user_id, timestamp
如果应用于您问题中的样本数据 - 输出是
【讨论】:
以上是关于在 Bigquery 中按用户计算登录之间的时间的主要内容,如果未能解决你的问题,请参考以下文章
如何计算 SQL Server 中按日期和用户分组的条目之间的平均时间?