如何计算MySQL中的出勤率datetime
。
例如:我想得到一个人一天工作的总时数。在给定的。
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
除休息时间中午12:00外,总时数为8小时。
答案 0 :(得分: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;
你需要做更多的数学处理休息,但这应该让你开始。
参考
答案 1 :(得分: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
答案 2 :(得分: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。