显示记录组

显示记录组

问题描述:

我已经有点大的难题在这里:)显示记录组

之间的平均时间我已经有2台数据库:survey_reply和问题, 这样的:

 
table SURVEY_REPLY 

id | question_id | data_time   | user_id | user reply and others col... 
-------------------------------------------------------- 
522| 2   | 2016-02-29 10:07:10 | jacky 
. | 3   | 2016-02-29 10:07:22 | jacky 
. | 1   | 2016-02-29 10:07:59 | jacky 
.. | 4   | 2016-02-29 10:08:40 | jacky 
...| 2   | 2016-02-29 11:21:10 | paul 
. | 3   | 2016-02-29 11:21:32 | paul 
. | 2   | 2016-02-29 11:21:35 | louise 
. | 1   | 2016-02-29 11:21:50 | paul 
.. | 4   | 2016-02-29 11:22:30 | paul 
.. | 3   | 2016-02-29 11:23:01 | louise 

的问题是显示按照此表中的顺序的用户:

 
table QUESTIONS 

    id | q_ord | survey_id | other columns.... 
    ------------------------------------------- 
    1 | 3 | 786 
    2 | 1 | 786 
    3 | 2 | 786 
    4 | 4 | 786 

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

本例中的计算

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

用于答复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 

3TH-第二。 (3TH一个减去第二一种)

为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个。

+0

用户可以跳过一个问题吗? – Yossi

+0

没有,不许 – JoTaRo

+0

多久张学友花答题2? – Strawberry

我假设你的结果集略微偏离了,而且我还不能第二个表的意义...

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; 
+0

哇,U吧,问题顺序是没用的! 顺便说一句我尝试你的代码,我得到了负面结果,我可以删除减号来解决。 – JoTaRo

+0

交换周围 – Strawberry

+0

的时间差异值I改变功能太:TIMESTAMPDIFF(SECOND,MAX(x.data),y.data)DIFF – JoTaRo