1

我有一个表格,以下列格式捕获最小/最大时间。

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

我想知道是否可以datetime为同一用户捕获 2 组不同的集合,如下表所示。这样做的原因是因为,数据用于管理可以随时进出多班次的承包商的出勤率。即,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

任何建议将不胜感激。

4

1 回答 1

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

当员工下班时,您的应用程序应通过将列设置为下班时间来检索该员工的现有记录和UPDATEClockOut

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您可以通过查找为NULL的行来确定谁打卡
  • 当员工忘记打卡时,您可以有某种处理流程
  • 为迟到或迟到的员工编辑打卡。
  • 您可以通过对每个员工的每一行进行 a 和 ,并对结果求和来确定每个员工的DATEDIFFClockOut工作ClockIn时间

在此示例中,验证数据的大部分责任将在您的应用程序中进行。您不希望某人被打卡多次,或者如果他们还没有真正打卡,就尝试打卡。

于 2012-12-31T19:33:06.857 回答