【发布时间】:2016-11-02 19:44:16
【问题描述】:
我有一张名为 time_track 的表:
+----+--------+---------------------+---------+
| id | emplid | ctimestamp | eventid |
+----+--------+---------------------+---------+
| 1 | 13 | 2016-06-02 03:41:41 | 1 |
+----+--------+---------------------+---------+
| 2 | 13 | 2016-06-02 09:04:49 | 2 |
+----+--------+---------------------+---------+
| 3 | 13 | 2016-06-02 10:03:13 | 1 |
+----+--------+---------------------+---------+
| 4 | 13 | 2016-06-02 13:21:23 | 2 |
+----+--------+---------------------+---------+
eventid 1 = Start work 和 eventid 2 = Stop work 的位置。
考虑到工作时间是所有 eventid 的 1 和 2 之间的总小时数,我如何计算任何一天的小时数 - WHERE emplid = 13 AND Year(ctimestamp) = 2016 and Month(ctimestamp) = 06 and Day(ctimestamp) = 02
【问题讨论】:
-
total hours in a day是什么意思?您是指两个时间戳之间的总小时数吗? -
我认为这是一个时间表 - 所以 Fred 在 03:41 打卡上班,一直工作到 09:04 ... 小睡了一个小时,然后在 10:03 到 13:21 再次打卡 -所以这是累计金额。但是,如果它正在按天分解,则 21:00 -> 04:00 将导致问题,因为给定日期将有 stop work 事件但没有前面的 开始工作事件。
-
这是一个经常针对数据库运行的查询,因此查询性能至关重要?如果是这样,您愿意考虑替代模式吗?您打算如何解决上述@CD001 指出的边缘条件或存在不成对的结束/开始时间(即数据不完整)的情况?
-
刚刚编辑了我的答案:添加了一个函数来计算总小时数。
-
@Devon 我的意思是总工作时间,如果 1 是工作开始,2 是工作结束。事件 1 和 2 一天可以发生多次,所以我想要总工作时间