我正在尝试找出添加员工打卡总时间的最佳方法。
INOUT 类型为 S 和 E。
我认为这样的东西可能是最好的解决方案,但我不知道它是否实用甚至可能:
例如:
No EnNo INOUT DateTime
1 12 S 2017-06-02 08:35
2 28 S 2017-06-02 10:10
3 28 E 2017-06-02 13:00
4 12 E 2017-06-02 14:02
5 12 S 2017-06-02 15:03
6 12 E 2017-06-02 18:09
所以在这个例子中,我可以尝试计算总工作时间。再说一遍,我不知道这是否可能。
我非常感谢任何关于如何实现这一目标的评论/建议,或者任何其他可能更实际的方法!
这样查询:
$query = "SELECT EnNo,
sum(case
when INOUT = 'E' then -DATEDIFF(MINUTE,2017-06-02,DateTime)
when INOUT = 'S' then DATEDIFF(MINUTE,2017-06-02,DateTime)
end
)/60 as Working Hours
From `dataimport`
Group By dataimport.EnNo";
但是结果没有产生..
最佳答案
可行的办法是选择两个员工之间的TIMESTAMPDIFF
。您必须以这样的方式将表本身连接起来,以便您可以区分同一天具有 S 和 E 的员工的两条记录之间的差异。
我自己尝试并在没有测试的情况下提出了以下内容,但它应该为您指明正确的方向:
SELECT
A.EnNo, TIMESTAMPDIFF(MINUTE,A.DateTime,B.DateTime)/60 AS WorkingHours
FROM dataimport A INNER JOIN dataimport B ON A.EnNo = B.EnNo AND
(A.INOUT = 'E' AND B.INOUT = 'S') OR (A.INOUT = 'S' AND B.INOUT = 'E')
AND TIMESTAMPDIFF(DAY,A.DateTime,B.DateTime) = 0
注意:您还可以更改 TIMESTAMPDIFF
来一次性找出小时数差异。
References: Calculate the time difference between of two rows https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
关于php - 查询mysql计算一天总工作时间的可能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44541504/