2016-11-24 10 views
0

このフォーラムには新しく追加されましたが、うまくいけば誰かが助けることができます。MYSQL - 特定の列がトリガされたときの集計時間の差

私は私が使用しているよ3列持つテーブル使用しています:

LOGOFF_REASON 
START_TIME 
END_TIME 

を私は数秒で理想的(START_TIME間& END_TIMEを時間を得るために探していますが、しかし、任意の形式になります。 LOGOFF_REASONに特定の理由コードが設定されている場合 - 「ランチ」など)。

私はいくつかの方法を試しましたが、いくつかの奇妙な結果が戻ってくるので、誰かが援助を加えられるかどうか疑問に思っていました。結果は表にどのように見えるか

enter image description here

+0

チェックhttp://stackoverflow.com/questions/3528219/mysql-how-to-get -the-difference-two-timestamps-seconds – AlecTMH

答えて

0

はこのお試しください:

SELECT SUM(TIME_TO_SEC(TIMEDIFF(END_TIME, START_TIME))) 
    FROM TABLENAME 
WHERE LOGOFF_REASON = 'Lunch' ; 
:あなたのコメントに続いて

SELECT TIME_TO_SEC(TIMEDIFF(END_TIME, START_TIME)) 
    FROM TABLENAME 
WHERE LOGOFF_REASON = 'Lunch' ; 

UPDATE

を、あなたはこれを試すことができます

これはあなたのニーズを完全に満たすことを望みます。

UPDATE 2

次の各理由であなたの累積時間を与えるだろう

SELECT LOGOFF_REASON , SUM(TIME_TO_SEC(TIMEDIFF(END_TIME, START_TIME))) 
    FROM TABLENAME 
GROUP BY LOGOFF_REASON ; 
+0

ありがとうFDavidov、私はそこにwhere節の負荷があり、Selectセクションがsumifになる必要があると言っていたはずです これを使っていましたが、それをやるより良い方法があると確信しています 合計(if(sessions.logoff_reason = 'Lunch'、time_to_sec(timediff if(sessions.end_time <> '0000-00- 00 00:00:00'、sessions.end_time、NOW())、sessions.start_time ))、NULL))ASランチ、 –

+0

もう一度ありがとう。 私が本当に必要とするのは、「ランチ」以外の約10の州があるので、そこではそれが他の州を無視するようなステートメントを使用することができない場合は、合計として持っていることです。 –

+0

OK私の答えを更新してください... – FDavidov

関連する問題