根据打卡/打出数据标记迟到的员工

时间:2015-08-07 22:17:49

标签: sql sql-server-2012

我目前正在开展个人项目,我很难过。我有一个数据样本表,其中包含XYZ公司员工的打卡和打卡数据。以下是表格PUNCHDTL:

的快速浏览

Snapshot of PUNCHDTL

我想创建一个单独的表,我可以调用PUNCH_FLAG,在那里我可以识别员工在班次开始或结束时间太晚或太早的情况。所有员工应该在一小时开始(即下午1点,下午2点,下午3点等),如果有人不在他们开始的5分钟(早或晚)之内,我想标记时间表。或结束时间。所以表格基本上是这样的:

Ex. Flag

在第2和第3张时间表中,您可以看到员工在他们的投入后5分钟内,但在他们的打卡时间超过5分钟。我上个月一直在学习SQL,而且我已经遇到了各种各样的障碍。

基本上我需要创建一个单独的表,同时还要使用识别是否应该标记某些内容的逻辑。如果你觉得这很容易,那么还有更多!员工可以在白天休息,因此轮班可以有两次打卡和打卡时间。如果有人在一小时之内离开,如果他们离开的时间是5分钟内没有关系,那么当有人打算吃饭时,当他们再次进入时也是如此。所以重要的是要认识到是否是第一个或者第二次换班,同样是为了打卡。

我看到它的方式,解决这个问题需要天才!我很想看到有一些SQL智慧的人如何解决这个问题的过程。请随时提出任何问题!

谢谢!

1 个答案:

答案 0 :(得分:1)

您的第一步是确定班次的第一个插入点。正如其他人所评论的那样,您很可能需要将其与某种计划进行比较。在最简单的情况下,每个员工从早上开始到晚上工作的时间表,你可以确定每天的第一次打卡:

List

然后你可以使用Select EmployeeID , cast(Actual_punchInTime as Date) as Day , Min(Actual_punchInTime) as FirstPunchTime From MyTable Group by EmployeeID , cast(Actual_punchInTime as Date) as Day 找出邮票的小时数,如下:

datepart