2013-02-19 230 views
1

任何想法如何計算出席人數datetime在MySQL中。計算出席時間戳

例如:我想獲得一個人在一天中工作的總小時數。在給定的。

MySQL的結構:

----------------------------------------------------- 
id | datetime   | Status | employeeID 
----------------------------------------------------- 
1 | 18-Feb-13 8:00:00 | Check in | 100A 
2 | 18-Feb-13 10:00:00 | Check in | 100A 
3 | 18-Feb-13 17:00:00 | Check Out | 100A 

靜止的總時間是8小時不包括休息時間下午12時00分。

+0

數據集是否完整?您是否缺少退房狀態? – 2013-02-19 03:13:07

+0

[你有什麼嘗試?](http://www.whathaveyoutried.com/)請參閱[問問建議](http://stackoverflow.com/questions/ask-advice)。 – 2013-02-19 03:13:57

回答

0

下面是一個PHP的方式做的日期數學:

$datetime1 = DateTime::createFromFormat('d-M-Y G:i:s', '18-Feb-13 8:00:00'); 
$datetime2 = DateTime::createFromFormat('d-M-Y G:i:s', '18-Feb-13 17:00:00'); 
$interval = $datetime1->diff($datetime2); 
$elapsed = $interval->format('%h hours %i minutes %S seconds'); 
echo $elapsed; 

See it in action

你需要做更多的數學處理中斷,但這應該讓你開始。

參考

+0

這會有很大的幫助。萬分感謝! – Japeth 2013-02-19 03:16:26

0

如果你到哪兒都簽出狀態,當人們離開,那麼你可以做一個自連接。
喜歡的東西:

Select day(e.datetime) as day, employeeid, 
     (max(e.datetime) - min(s.datetime)) as timespend 
from table1 e 
inner join table1 s on (day(e.datetime) = day(s.datetime) and e.id <> s.id) 
where s.status = 'check in' and e.status = 'check out' 
group by day(e.datetime), employeeid 
0

假設大家誰的作品中午要花一個小時了,那麼這個查詢應該工作使用TIMESTAMPDIFF,每個員工和每個日期分組:

SELECT TIMESTAMPDIFF(HOUR, 
      MIN(CASE WHEN Status = 'Check In' THEN DateTime END), 
      MAX(CASE WHEN Status = 'Check Out' THEN DateTime END))-1 as HoursWorked, 
    EmployeeId, 
    Date(DateTime) 
FROM YourTable T 
GROUP BY EmployeeId, Date(DateTime) 

這裏是一個樣品SQL Fiddle

+0

這太棒了。多謝,夥計! – Japeth 2013-02-19 03:21:41

+0

@Japeth - 沒問題,很高興我可以幫助:)順便說一句,如果一個答案幫助你,請將其標記爲接受,以幫助該網站的未來用戶。祝你好運! – sgeddes 2013-02-19 03:24:14

+0

是的,我會的。謝謝。更多來! – Japeth 2013-02-19 04:37:30