【问题标题】:Average date diff on MySQLMySQL中的平均日期差异
【发布时间】:2014-06-26 14:45:01
【问题描述】:

我有一个名为“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 分组并同时计算平均值似乎具有挑战性。我将加入同一张桌子。

有人可以帮助我吗? 谢谢!

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以通过执行以下操作获得平均差异(以秒为单位):

    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;
    

    关键思想是平均差异是最大值减去最小值除以记录数减去一。

    【讨论】:

    • 你的想法很有道理。虽然我在 SQL 语句上遇到错误。我将“end”更改为“end case”,但仍然无法正常工作。
    【解决方案2】:

    您无法通过单个查询来执行此操作。 要么使用存储过程,要么在您的应用程序端执行(应该很容易)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-22
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多