合并sql表

时间:2015-07-03 12:39:11

标签: php mysql datetime

我有一张桌子,其中包含班次换班和退出员工的时间。每条记录都有AutoGenID,employeeID,开始日期时间和结束日期时间。根据这些数据,我希望找到每个员工在一个特定时间段(例如一个月)的工作时间。

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

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

例如,假设用户A在2015-07-03 10:51:19' 2015-07-03 10:51:19'之后又在他的电脑上重新登录了2015-07-03 12:36:14'

在一天结束的时候,他在电脑上签了2015-07-03 18:12:29'并于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 |
+----+-----------+---------------------+---------------------+

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

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

所以有人都知道如何做到这一点。

谢谢

1 个答案:

答案 0 :(得分:1)

Dipen Shah有一点意见,但有时你无法改变登录的记录方式。在这种情况下,您可以尝试按日期对表进行分组,并查询每个用户和日期的最小(开始)和最大(结束),如下所示:

select empid, min(start), max(end) from signin group by empid, date(start);
相关问题