php - 合并sql表中重叠的日期间隔

标签 php mysql datetime

我有一个表,其中包含员工的轮类签到和签退时间。每条记录都有 AutoGenID、employeeID、开始日期时间和结束日期时间。根据这些数据,我想找到每个员工在给定时间段(例如一个月)内的工作时间。

这不是基于网络的,而是一个可以在离线模式下运行的移动和 PC 应用程序。

问题在于,单个员工可能有也可能没有多个具有重叠日期间隔的记录。这是因为员工每天可以在多个设备上单独登录,并且所有这些条目都添加到这个集中式数据库表中。因此,单个员工可能存在也可能不存在重叠的日期间隔。

例如,假设用户 A 在“2015-07-03 10:51:19”从他的手机登录,后来又在“2015-07-03 12:36:14”从他的电脑再次登录

当天结束时,他于“2015-07-03 18:12:29”从 PC 上注销,并于“2015-07-03 18:19:53”从移动设备上注销

第二天他只使用他的电脑登录。所以在数据库中我有以下记录。

+----+-----------+---------------------+---------------------+
| ID |   EmpID   |         start       |         End         |
+----+-----------+---------------------+---------------------+
| 1  |   EM001   | 2015-07-03 10:51:19 | 2015-07-03 18:19:53 |
| 2  |   EM001   | 2015-07-03 12:36:14 | 2015-07-03 18:12:29 |
| 3  |   EM001   | 2015-07-04 11:34:52 | 2015-07-04 17:21:43 |
+----+-----------+---------------------+---------------------+

但是在查询数据时,我只需要员工的工作时间。因此,如果日期重叠,我需要第一个开始时间和最后一个结束时间,以便我可以计算小时数。同样,此问题仅在时间重叠的日子里出现,并且在某些日子里单个员工可能不会出现重叠时间。

此小时计算不用于员工工资目的。它只是为了捕获用户的工作时间。

有人知道如何做到这一点吗?

谢谢

最佳答案

Dipen Shah 说得有道理,但有时您无法更改登录的记录方式。在这种情况下,也许您可​​以尝试按日期对表进行分组,并查询每个用户和日期的最小值(开始)和最大值(结束),如下所示:

select empid, min(start), max(end) from signin group by empid, date(start);

关于php - 合并sql表中重叠的日期间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31207124/

相关文章:

php - 查询同步mysql

postgresql - 如何在 postgresql 插入查询中插入当前日期时间

php - 使用 AngularJS 将数组作为参数传递给 PHP Restful Api

PHP - 将时间类型的变量插入到 MySQL 时间类型的列中

mysql - 根据 MySQL 中的条件求和

MySQL 时区 Transaction_type_id

python - 未指定的未转换数据是什么意思?

php - wordpress中的index.php什么时候执行?

javascript - 仅在 JQuery、PHP、MySQL 上仅在最后一个 KeyUp 上自动保存。如何?

mysql - MySQL Sakila 数据库简单查询