我有一张表格,以下列格式捕捉最小/最大时间。
1 2012-10-30 12:13:07.000 2012-10-30 15:18:50.000
2 2012-10-30 16:13:07.000 2012-10-30 21:18:50.000
我想知道是否有可能为同一个用户捕获2个不同的datetime
集,如下表所示。这样做的原因是,数据用于管理承包商的出勤情况,这些承包商可以随时进出多班。也就是说,UID 1可以在12:00时钟和在15:00时钟输出并且稍后返回并且在18:00再次返回并在21:00时退出,并且它们不在时间表或班次时间表上工作。
uid clock clock Status
1 2012-10-30 12:00:00.000 2012-10-30 15:00:00.000 regular
1 2012-10-30 18:00:00.000 2012-10-30 21:00:00.000 Split
2 2012-10-30 16:13:07.000 2012-10-30 21:18:50.000 regular
任何建议都将不胜感激。
答案 0 :(得分:0)
在不了解应用程序详细信息的情况下,我会说您构建数据的最佳方法是让每个员工的每个记录对应一个“Punch In / Punch Out”。从那里开始,计算每个员工在一段时间内的工作时间是非常简单的。我没有记错,这听起来很像你在第二个例子中描述的数据(减去Status
列)。
在最简单的示例中,您的表格将包含以下列:
UID (INT or uniqueidentifier)
ClockIn (datetime)
ClockOut (datetime)
当员工进入时,您会在该表中为该员工插入一行,并将时钟放在ClockIn
列下。
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
随着每位员工的到来,他们将分别获得一行
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
2 2012-10-30 1:00:00.000 NULL
3 2012-10-30 2:00:00.000 NULL
当员工退出时,您的应用程序应该检索该员工的现有记录,并通过将UPDATE
列设置为时钟输出时ClockOut
行。
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
2 2012-10-30 1:00:00.000 2012-10-30 3:30:00.000
3 2012-10-30 2:00:00.000 NULL
如果一名员工退出,然后稍后返回,他们将获得一条新记录,就好像他们当天早些时候一样。
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
2 2012-10-30 1:00:00.000 2012-10-30 3:30:00.000
3 2012-10-30 2:00:00.000 NULL
2 2012-10-30 4:30:00.000 NULL
希望在这一点上,你应该能够看到这个相当简单的数据模型是如何灵活到足以允许你的大部分标准时间保持功能。
ClockOut
为空的行DATEDIFF
ClockOut
和ClockIn
分别为每位员工确定工作总时数,并总结结果在此示例中,验证数据的大部分责任将在以后的应用程序中进行。你不希望有人多次被计时,或者如果他们还没有真正打过拳头的话,他们会尝试退出。