【发布时间】:2014-04-27 16:59:05
【问题描述】:
我有一个 SQL 表,用于存储每个员工的进出时间戳。
有员工不止一次打卡(因为他们没有听到卡片被读取),其他员工出于某种原因打卡(也许他们遇到朋友和保持谈话 1 或 2 分钟)他们会等几分钟,然后再次打卡进入旋转栅门。
示例 SQL 表数据如下所示(仅限 3 名员工):
现在,我想对每个时间进行分类,以了解哪个时间戳是正确的,等等。
例如:
如您所见,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:10 之间的时间大于 2 分钟。
【问题讨论】:
-
您使用的是什么数据库?而且,您能否更明确地说明您要查找的不同组的规则?
-
SQL 2012,是的,我想将重复的时间(可能有 2 分钟的容差)标记为 INACTIVE,所以如果员工有 3 个连续的 IN,那么第一个 IN 不会被标记但接下来的 2 个时间戳,如果它们之间的秒数或分钟数少于 2 分钟,则标记为 INACTIVE。
-
我只是更新问题。
-
我仍然没有得到不活动的规则。时间戳 9:04:35am // 将被标记为非活动,因为它在前一个时间戳 9:04:27am 的时间范围(2 分钟)内 //
-
+1 以良好的格式详细询问
标签: c# sql sql-server-2012