1

クエリをテストして、適切な結果が返されることを確認しました。しかし、私は自分が間違った時間を取っていることに気づきました。私のタイムスタンプの1つは

2013-02-07 07:26:04

そして私は引く:

2013-02-07 07:18:23

最初のタイムスタンプから

それは私に12分かそこらの違いを与えていました。今、私は数学の天才ではありませんが、18-12 = 6...ではなく12...と言うこともできるので、クエリに問題があることはわかっていました。だから私はSEC_TO_TIMEを削除しました、そしてそれは私に次の正しい時間差を与えました:

+------------+-----------+--------------+----------------+--------+----------+
| session_id | anum      | first        | last           | why    | time     |
+------------+-----------+--------------+----------------+--------+----------+
|        220 | B00000000 | Testing      | thisout        | Other  | 00:07:41 |
+------------+-----------+--------------+----------------+--------+----------+


This is my query now : 


SELECT 
session.session_id, 
session.anum, 
student.first, 
student.last, 
session.why,
(TIMEDIFF(t.fin, session.signintime)) AS time 
FROM session 
INNER JOIN student 
    ON session.anum = student.anum  
LEFT JOIN (SELECT support.session_id, MAX(support.finishtime) AS fin FROM support GROUP BY support.session_id) AS t  
    ON t.session_id = session.session_id 
WHERE session.status = 3 

問題は、TIMEDIFFの前にSEC_TO_TIMEを追加すると発生します。

なぜこれが起こるのですか?

ここで、SEC_TO_TIMEを使用したクエリの結果を表示します。

+------------+-----------+--------------+----------------+--------+----------+
| session_id | anum      | first        | last           | why    | time     |
+------------+-----------+--------------+----------------+--------+----------+
|        220 | B00000000 | Testing      | thisout        | Other  | 00:12:21 |
+------------+-----------+--------------+----------------+--------+----------+
2 rows in set (0.00 sec)

どんな説明でも素敵でしょう。

4

2 に答える 2

2

00:07:41 =741秒=00:12:21は、SEC_TO_TIMEがそれを認識する方法です。この関数は数秒かかり、フォーマットをh:m:iとして変換します。すでにh:m:iとして持っているので、ここでSEC_TO_TIMEを使用しても意味がありません。

于 2013-02-07T13:10:36.247 に答える
2

あなたはすでに時間形式を持っているので、多分あなたは時間を秒に変換しようとしています

TIME_TO_SEC()

あなたのdiff関数は秒ではなく時間を返します、そしてuは使うべきですTIME_TO_SEC()

于 2013-02-07T13:10:45.543 に答える