mysql - 找出一列中的时间范围
问题描述
我们有一个应用程序可以帮助人们找到其他篮球运动员一起打球。我的任务是找出每个游戏加入者之间的平均时间,例如,游戏 2445,一个用户加入,然后另一个用户加入,然后另一个用户加入。我想找出每个加入者之间的时间范围。
game_users 表格式如下
game_id | user_id | active | created_at
1234 |3455 | 1 | 2020-01-26 05:18:18
1234 |5673 | 1 |2020-02-16 04:16:15
1234 |2344 | 1 |2020-02-22 18:59:55
这里的created_at是指用户加入游戏的时间
如何找出用户加入游戏的平均时间?
解决方案
首先,您需要找出两个连接之间的时间差,您可以使用窗口函数LEAD()
和TIMESTAMPDIFF()
(在我的版本中,我以小时为单位显示差异,您可以将其更改为对您有意义的任何内容),然后您可以计算平均值使用 cte :
;with cte as (
SELECT
*
,TIMESTAMPDIFF(HOUR, created_at ,LEAD(created_at) OVER (Partition by game_id order by created_at)) as TimeDifference
FROM game_users
)
SELECT
game_id
, AVG(TimeDifference) as avgTimedifference
FROM cte
GROUP BY game_id
推荐阅读
- r - 是否可以以特定名称加载 Granges .Rdata 文件?
- optimization - lisp中访问数组的优化
- ios - 圆形贝塞尔路径不在正确路径中
- airflow - 为什么 Airflow Worker 尝试连接到本地 MYSQL 服务器而不是从气流配置中获取
- java - 如何在图像的不同部分连续放置水印
- excel - 无法更改单元格值
- python - 在 localhost 上执行 python 脚本的 plpythonu 函数不起作用
- python - 比较所有行的多个特定列
- python - flask-restful 中的 Catch-All URL 示例也捕获 /
- c - 从进程上下文计算 1 秒内的中断数