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 的休息时间。

4

3 回答 3

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;

看到它在行动

你需要做更多的数学来处理休息,但这应该让你开始。

参考

于 2013-02-19T03:06:22.053 回答
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
于 2013-02-19T03:15:50.017 回答
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

于 2013-02-19T03:16:03.130 回答