gpt4 book ai didi

c# - SQL - 对员工进入时间进行分类

转载 作者:太空狗 更新时间:2023-10-30 01:36:04 25 4
gpt4 key购买 nike

我有一个 SQL 表,我在其中存储每个员工的进出时间戳。

有不止一次刷卡的员工(因为他们没有听说卡片被读过),其他员工出于某种原因(也许他们遇到 friend 和保持交谈 1 或 2 分钟)他们会等几分钟,然后再次打卡进入十字转门。

示例 SQL 表数据如下所示(仅限 3 名员工):

enter image description here

现在,我想对每个时间进行分类,以了解什么时间戳是正确的等等。

例如:

enter image description here

在您看到的EMP_01(黄色记录)中,LAST_LEAVE 技术上是 00:38:21,但很明显员工打了两次拳,这就是真正的 LAST_LEAVE 是 00:38:16 的原因。

但是,EMP_04 还有一些其他问题,如果你看到最后 4 条记录,他连续 3 次 IN,但这不是因为他没有听到传感器发出的哔哔声,那是因为他从其他门离开不知道什么时候打卡,但我们知道他在 1 小时后再次进入,依此类推。

那么,关于如何处理这个问题有什么建议吗?以及如何分配我的“状态”标志?

更新:

例如,如果 EMP_04 有 3 个相同类型(IN 或 OUT)的连续时间戳:

  • 上午 9:04:27(印第安纳州)
  • 上午 9:04:35(印第安纳州)
  • 上午 9:04:40(印第安纳州)

我的容忍度是 120 秒,所以第一次 9:04:27 是可以的,但接下来的 2 个连续时间戳应该是 INACTIVE,因为我的容忍度是 120 秒。

但是,例如,如果 EMP_04 具有以下连续时间戳:

  • 上午 9:04:27(印第安纳州)
  • 上午 9:04:35(印第安纳州)
  • 上午 9:08:10(印第安纳州)

然后唯一标记为 INACTIVE 的时间将是上午 9:04:35。因为 9:04.35 和 9:08:10am 之间的时间大于 2 分钟。

最佳答案

首先,感谢@RamRS 付出了艰辛的努力,这是一个经过测试的触发器,您应该可以开始使用它。显然,极端情况需要一些稳健的测试:

CREATE TRIGGER TS_FindDups ON dbo.TS FOR INSERT
AS
BEGIN

;WITH DupRecords
AS
(
SELECT i.EmployeeId, i.[TimeStamp]
FROM inserted i
INNER JOIN dbo.TS SRC ON i.EmployeeId = SRC.EmployeeId AND i.EntranceType = SRC.EntranceType
WHERE SRC.[Status] != 'Inactive'
/* same day (nice...thanks to RamRS) */
AND CAST(i.[TimeStamp] AS date) = CAST(SRC.[TimeStamp] AS date)
/* only checking newer timestamps (also need this so DATEDIFF <= 2 works correctly) */
AND i.[TimeStamp] > SRC.[TimeStamp]
/* newer timestamps are less than two minutes for same Employee, same day, same EntranceType */
AND DATEDIFF(MINUTE, SRC.[TimeStamp], i.[TimeStamp]) <= 2
)

UPDATE dbo.TS
SET [Status] = 'Inactive'
FROM dbo.TS SRC
INNER JOIN DupRecords ON SRC.EmployeeId = DupRecords.EmployeeId AND SRC.[TimeStamp] = DupRecords.[TimeStamp]

END

关于c# - SQL - 对员工进入时间进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23326277/

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