【问题标题】:show average time between records groups显示记录组之间的平均时间
【发布时间】:2016-02-29 13:00:14
【问题描述】:

我有一个小难题:)

我有一个包含 2 个表的数据库:survey_reply 和 questions, 像这样:

表 SURVEY_REPLY 编号 |问题ID |数据时间 |用户 ID |用户回复和其他人... -------------------------------------------------- ------ 522| 2 | 2016-02-29 10:07:10 |杰基 . | 3 | 2016-02-29 10:07:22 |杰基 . | 1 | 2016-02-29 10:07:59 |杰基 .. | 4 | 2016-02-29 10:08:40 |杰基 ...| 2 | 2016-02-29 11:21:10 |保罗 . | 3 | 2016-02-29 11:21:32 |保罗 . | 2 | 2016-02-29 11:21:35 |路易丝 . | 1 | 2016-02-29 11:21:50 |保罗 .. | 4 | 2016-02-29 11:22:30 |保罗 .. | 3 | 2016-02-29 11:23:01 |路易丝

问题按照下表中的顺序显示给用户:

表问题 编号 | q_ord |调查ID |其他栏目...... ------------------------------------------ 1 | 3 | 786 2 | 1 | 786 3 | 2 | 786 4 | 4 | 786

我会知道平均回复时间,即人们做出选择和回答问题所花费的时间。

本例中的计算

第 4-3 次。 (最后一个减去前一个)

用于回复 question.id=4 (question.q_ord=4)

    jacky spent 41 sec (10:08:40-10:07:59)
    paul        80 sec (11:22:30-11:21:50)
    louise doesnt reply

第 3-2 次。 (第三个减去第二个)

对于 question.id=1 (question.q_ord=3)

    jacky spent 37 sec (10:07:59-10:07:22)
    paul        18 sec (11:21:50-11:21:32)
    louise doesnt reply

第二至第一。 对于 question.id=3 (question.q_ord=2)

    jacky spent 12 sec (10:07:22-10:07:10)
    paul        22 sec (11:21:32-11:21:10)
    louise      86 sec (11:23:01-11:21:35)

我不需要计算开始 question.id=2 (question.q_ord=1) 的时间

结果应该是:

q_id | q_ord | av_reply_time ------------------------------------------ 3 | 2 | (12+22+86)/3 1 | 3 | (37+18)/2 4 | 4 | (41+80)/2

如何解决?

PS q_ord 它是一个连续的整数,没有跳过任何数字。 总是从 1 开始。在这种情况下,我总是知道最大数量(调查中的总问题)只有 4。

【问题讨论】:

  • 用户可以跳过问题吗?
  • jacky回答第2题花了多长时间?
  • 12 秒:第 2 到第 1。对于 question.id=3 (question.q_ord=2) jacky 花了 12 秒 (10:07:22-10:07:10)
  • 对于第一个问题(id 2)我不关心“我不需要计算开始 question.id=2 (question.q_ord=1) 的时间”

标签: mysql datetime average


【解决方案1】:

我假设您的结果集略有偏差,我(还)看不到第二个表的重要性...

SELECT question_id
     , AVG(diff) avg_diff 
  FROM 
     ( SELECT x.user_id
            , x.question_id
            , TIME_TO_SEC(TIMEDIFF(MAX(y.data_time),x.data_time)) diff 
         FROM survey_reply x 
         JOIN survey_reply y 
           ON y.user_id = x.user_id 
          AND y.data_time < x.data_time 
        GROUP 
           BY x.user_id
            , x.question_id
     ) a
 GROUP 
    BY question_id;

【讨论】:

  • 哇,你对,问题顺序没用!顺便说一句,我尝试了您的代码,但结果是否定的,我可以删除减号来解决。
  • 交换时间差异值
  • 我也改变了函数:TIMESTAMPDIFF(SECOND,MAX(x.data),y.data) diff
猜你喜欢
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
相关资源
最近更新 更多