gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:07:39 34 4
gpt4 key购买 nike

我有一个表,其中包含员工的轮类签到和签退时间。每条记录都有 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com