2013-02-07 61 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