0

レポートを実行しようとしているテーブルがあります。問題は、同じsession_idものを使用すると、すべてのレコードの最初のタイムスタンプのみが選択されることです。

これは私の結果セットです:

+------------+-----------+---------+---------+------------------+---------------+----------+---------------------+----------+
| 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_id 218すべてのレコードのタイムスタンプが同じであることに注意してください。

各カウンセラーは1つのセッションで作業できるため、タイムスタンプはすべてで異なる必要があるため、主キー(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)

1つのセッションには、必要に応じて多くのサポートチケットがあります。これも私のスキーマの写真です

番号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)
4

1 に答える 1

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
于 2013-02-07T01:50:02.377 に答える