2013-02-07 60 views
0

我有一個表,我正在嘗試運行報告。問題是,當使用相同的session_id時,它只會爲所有記錄選擇第一個時間戳。Mysql查詢返回不正確的時間戳

這是我的結果集:

+------------+-----------+---------+---------+------------------+---------------+----------+---------------------+----------+ 
| session_id | anum  | first | last | counselor  | why   | start | Time With Counselor | total | 
+------------+-----------+---------+---------+------------------+---------------+----------+---------------------+----------+ 
|  215 | A00000000 | rixhers | jdjdjdh | Christine McGraw | Appeal  | 00:02:20 | 00:00:04   | 00:02:24 | 
|  216 | B00000000 | rixhers | jdjdjdh | Dawn Lowe  | Loan Question | 00:00:05 | 00:00:03   | 00:00:08 | 
|  217 | D00000000 | forthis | isatest | Cherie McMickle | Loan Question | 00:02:08 | 00:00:02   | 00:02:10 | 
|  218 | A00000000 | rixhers | jdjdjdh | John Ivankovic | Tap Question | 00:00:42 | 00:00:01   | 00:00:43 | 
|  218 | A00000000 | rixhers | jdjdjdh | Christine McGraw | Tap Question | 00:00:42 | 00:00:01   | 00:00:43 | 
|  218 | A00000000 | rixhers | jdjdjdh | Tootie   | Tap Question | 00:00:42 | 00:00:01   | 00:00:43 | 
|  218 | A00000000 | rixhers | jdjdjdh | Front-Kiana  | Tap Question | 00:00:42 | 00:00:01   | 00:00:43 | 
+------------+-----------+---------+---------+------------------+---------------+----------+---------------------+----------+ 
7 rows in set (0.00 sec) 

通知session_id218有所有的記錄相同的時間戳。

我按主鍵(session_id,Counselor)分組,因爲每位顧問都可以在一個會話上工作,所以時間戳必須不同。

這是我的查詢:

SELECT 
session.session_id, 
session.anum, 
student.first, 
student.last, 
c.counselor, 
session.why, 
SEC_TO_TIME(TIMEDIFF(t.start, session.signintime)) as start, 
SEC_TO_TIME(TIMEDIFF(t.fin, t.start)) AS 'Time With Counselor', 
SEC_TO_TIME(TIMEDIFF(t.fin, session.signintime)) AS total 
FROM session 
INNER JOIN student 
    ON student.anum = session.anum 
LEFT JOIN (SELECT support.session_id, support.starttime AS start, support.finishtime AS fin FROM support GROUP BY support.session_id, support.cid) AS t 
    ON t.session_id = session.session_id  
INNER JOIN (select support.session_id, support.cid, counselors.counselor FROM support INNER JOIN counselors ON counselors.cid = support.cid group by support.session_id, support.cid) AS c 
    ON c.session_id = session.session_id 
WHERE session.status = 3 
GROUP BY c.session_id, c.cid; 

我失去了一些東西簡單在這裏傢伙/加侖?

感謝, -RaGe

編輯數1:

mysql> SELECT * from support WHERE session_id = 218; 
+------------+-----+---------------------+---------------------+-------------------+ 
| session_id | cid | starttime   | finishtime   | counselorcomments | 
+------------+-----+---------------------+---------------------+-------------------+ 
|  218 | 1 | 2013-02-06 13:26:40 | 2013-02-06 13:26:41 |     | 
|  218 | 2 | 2013-02-06 13:26:45 | 2013-02-06 13:26:48 | done    | 
|  218 | 5 | 2013-02-06 13:26:25 | 2013-02-06 13:26:28 | v     | 
|  218 | 8 | 2013-02-06 13:26:34 | 2013-02-06 13:26:36 |     | 
+------------+-----+---------------------+---------------------+-------------------+ 
4 rows in set (0.00 sec) 

編輯號碼2:如有需要,

mysql> SELECT * FROM session; 
+------------+-----------+---------------+---------+---------------------+-----------------+--------+ 
| session_id | anum  | why   | aidyear | signintime   | studentcomments | status | 
+------------+-----------+---------------+---------+---------------------+-----------------+--------+ 
|  215 | A00000000 | Appeal  | 12-13 | 2013-02-06 09:01:45 |     |  3 | 
|  216 | B00000000 | Loan Question | 12-13 | 2013-02-06 09:14:10 |     |  3 | 
|  217 | D00000000 | Loan Question | 12-13 | 2013-02-06 09:14:57 |     |  3 | 
|  218 | A00000000 | Tap Question | 12-13 | 2013-02-06 13:25:58 |     |  3 | 
+------------+-----------+---------------+---------+---------------------+-----------------+--------+ 
4 rows in set (0.00 sec) 

一屆有許多支持票。也這是一個圖片Of My schema

編輯號碼3:

SELECT 
s.session_id, 
s.anum, 
st.first, 
st.last, 
c.counselor, 
s.why, 
SEC_TO_TIME(TIMEDIFF(sup.starttime, s.signintime)) as start, 
SEC_TO_TIME(TIMEDIFF(sup.finishtime, sup.starttime)) AS 'Time With Counselor', 
SEC_TO_TIME(TIMEDIFF(sup.finishtime, s.signintime)) AS total 
FROM session s 
INNER JOIN student st 
    ON st.anum = s.anum 
INNER JOIN support sup 
    ON s.session_id = sup.session_id 
INNER JOIN counselors c 
    ON sup.cid = c.cid 
WHERE s.status = 3 
ORDER BY s.session_id asc; 

+------------+-----------+---------+---------+------------------+---------------+----------+---------------------+----------+ 
| session_id | anum  | first | last | counselor  | why   | start | Time With Counselor | total | 
+------------+-----------+---------+---------+------------------+---------------+----------+---------------------+----------+ 
|  215 | A00000000 | rixhers | jdjdjdh | Christine McGraw | Appeal  | 00:02:20 | 00:00:04   | 00:02:24 | 
|  216 | B00000000 | rixhers | jdjdjdh | Dawn Lowe  | Loan Question | 00:00:05 | 00:00:03   | 00:00:08 | 
|  217 | D00000000 | forthis | isatest | Cherie McMickle | Loan Question | 00:02:08 | 00:00:02   | 00:02:10 | 
|  218 | A00000000 | rixhers | jdjdjdh | Tootie   | Tap Question | 00:00:27 | 00:00:03   | 00:00:30 | 
|  218 | A00000000 | rixhers | jdjdjdh | Front-Kiana  | Tap Question | 00:00:36 | 00:00:02   | 00:00:38 | 
|  218 | A00000000 | rixhers | jdjdjdh | John Ivankovic | Tap Question | 00:00:42 | 00:00:01   | 00:00:43 | 
|  218 | A00000000 | rixhers | jdjdjdh | Christine McGraw | Tap Question | 00:00:47 | 00:00:03   | 00:00:50 | 
+------------+-----------+---------+---------+------------------+---------------+----------+---------------------+----------+ 
7 rows in set (0.00 sec) 
+0

您可以發佈支持表的結果嗎?做SELECT * FROM支持WHERE SessionID = 218 – cgatian

+0

已更新,如果您需要其他內容請讓我知道 – RaGe10940

+0

如果您注意到,我遇到問題的select查詢只是使用第一條記錄(session_id = 218和cid = 1)並且它正在使用 – RaGe10940

回答

1

嘗試運行該查詢移除進行的查詢看起來像一個熱的野獸,讓她下來的一切,你真的需要所有的「善」 。我建議爲列指定適當的東西。

SELECT 
s.session_id, 
s.anum, 
st.first, 
st.last, 
c.counselor, 
s.why, 
SEC_TO_TIME(TIMEDIFF(sup.starttime, s.signintime)) as start, 
SEC_TO_TIME(TIMEDIFF(sup.finishtime, sup.starttime)) AS 'Time With Counselor', 
SEC_TO_TIME(TIMEDIFF(sup.finishtime, s.signintime)) AS total 
FROM session s 
INNER JOIN student st 
    ON st.anum = s.anum 
INNER JOIN Support sup 
    ON s.session_id = sup.session_id 
INNER JOIN Counselors c 
    ON sup.cid = c.cid 
WHERE s.status = 3 
+0

如果我可以選擇你的大腦,那麼輝煌,你是如何得到這個查詢的?這完美的作品! – RaGe10940

+0

當你提供地圖時,它對你想要的東西更有意義。我無視這些聯合,一次只處理一個問題。我看到你想要學生,所以對我們所需要的東西來說,這很容易加入1 = 1。下一個你想知道支持票數的藥水,兩者之間唯一的關鍵是session_id。當你加入這些表格時,只需運行一個SELECT *並查看你的表格變寬可能會有所幫助,這可能會幫助你可視化聯接的表現。 – cgatian

+0

好的,謝謝你這麼多先生。真的幫了我很多! – RaGe10940