首页 > 解决方案 > 找出一列中的时间范围

问题描述

我们有一个应用程序可以帮助人们找到其他篮球运动员一起打球。我的任务是找出每个游戏加入者之间的平均时间,例如,游戏 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是指用户加入游戏的时间

如何找出用户加入游戏的平均时间?

标签: mysqlsqlaverageaggregate-functionsmysql-5.7

解决方案


首先,您需要找出两个连接之间的时间差,您可以使用窗口函数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

推荐阅读