显示记录组
我已经有点大的难题在这里:)显示记录组
之间的平均时间我已经有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个。
我假设你的结果集略微偏离了,而且我还不能第二个表的意义...
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;
哇,U吧,问题顺序是没用的! 顺便说一句我尝试你的代码,我得到了负面结果,我可以删除减号来解决。 – JoTaRo
交换周围 – Strawberry
的时间差异值I改变功能太:TIMESTAMPDIFF(SECOND,MAX(x.data),y.data)DIFF – JoTaRo
用户可以跳过一个问题吗? – Yossi
没有,不许 – JoTaRo
多久张学友花答题2? – Strawberry