2016-11-24 28 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-between-two-timestamps-in-seconds – AlecTMH

回答

0

試試這個:

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

UPDATE

按照你的意見,你可以試試這個:

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

希望這完全滿足您的需求。

更新2

下面將爲你的累計時間爲每個理由:

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

謝謝FDavidov,我應該說已經有一個where子句的加載和select部分需要sumif 正在使用這個,但我肯定會有更好的方式做到這一點 sum(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

好吧。更新我的答案,敬請期待... – FDavidov

相關問題