php - 查询mysql计算一天总工作时间的可能方法

标签 php mysql

我正在尝试找出添加员工打卡总时间的最佳方法。

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/

相关文章:

php - 将负数变为 0 的默认 php 函数

php - 在单个查询中使用 OR、AND 运算符

php - 替换为 MySQL 中的 IF 条件和 LIKE 语句

mysql - 使用时间戳字段对表进行排序而不考虑一天中的时间

mysql - 如果 CONCAT 中有 'null' 值,则得到空结果

php - 将 HTML 标签解析为 PDO MySQL

php - 将 google 云存储 api 与开发人员 key (不是 OAuth2)一起使用

php - 如何禁用php中的mysql功能

mysql - 避免用户在 wordpress 中更改密码

php - MySql 和 PDO : How to send a null param with bindParam()