2016-02-29 106 views
0

我已經有點大的難題在這裏:)顯示記錄組

之間的平均時間我已經有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

回答

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

哇,U吧,問題順序是沒用的! 順便說一句我嘗試你的代碼,我得到了負面結果,我可以刪除減號來解決。 – JoTaRo

+0

交換周圍 – Strawberry

+0

的時間差異值I改變功能太:TIMESTAMPDIFF(SECOND,MAX(x.data),y.data)DIFF – JoTaRo