我有一个名为'game_logs'的表,其结构如下:
id: integer
user_id: integer
game_id: integer
game_event_type_id: integer
timestamp: datetime
对于具有相同user_id和game_id的记录,我必须计算类型“3”(game_event_type_id = 3)的事件之间的平均时间差异。
id, user_id, game_id, game_event_type_id, timestamp
'1', '45', '92', '3', '2014-06-02 15:36:04'
'2', '45', '92', '3', '2014-06-02 15:36:17'
'3', '45', '92', '3', '2014-06-02 15:36:25'
'4', '20', '91', '3', '2014-06-02 15:37:15'
我一直在尝试不同的事情,但是按照game_id和user_id进行分组并同时计算平均值似乎很有挑战性。我正在加入同一张桌子。
有人能帮助我吗? 谢谢!
答案 0 :(得分:3)
您可以通过执行以下步骤获得平均差异:
select user_id, game_id,
(case when count(*) > 1
then timestampdiff(second, min(timestamp), max(timestamp)) / (count(*) - 1)
end) as AvgDiffSeconds
from game_logs gl
where game_event_type_id = 3
group by user_id, game_id;
关键的想法是,平均差异是最大值减去最小值除以记录数量的一个。
答案 1 :(得分:-1)
单个查询无法执行此操作。 要么使用存储过程,要么在应用程序端进行(在那里应该很容易)