如何从包含所有滑动记录的表中只选择滑动用户



我有一个SQL Server表task_swipe_rec它只有6列。我想知道现在有多少人签到完成了分配的任务,以及到目前为止他们在这些任务上花了多少分钟。

我希望得到未刷出(未完成)的任务列表以及当前刷入的员工在每个任务上花费的分钟数。

Emp_Swipe_Rec_PK3

我认为您需要像下面这样的逻辑,检查每个开始记录是否存在结束记录。然而,使用提供的数据似乎不可能得到预期的结果。

DECLARE @emp_swipe_rec table (EMPLOYEE_ID int, TASK_ID int, SWIPE_TYPE char(1), SWIPE_IN_OUT_TIME datetime2);
DECLARE @Now datetime2 = '2021-03-07 16:40:00.000'; --sysdatetime();
INSERT INTO @emp_swipe_rec (EMPLOYEE_ID, TASK_ID, SWIPE_TYPE, SWIPE_IN_OUT_TIME)
VALUES
(1,1,'I','2021-03-07 08:00:00.000'),
(2,2,'I','2021-03-07 08:00:00.000'),
(1,1,'O','2021-03-07 15:00:00.000'),
(1,3,'I','2021-03-07 16:00:00.000');
SELECT I.EMPLOYEE_ID, I.TASK_ID
, DATEDIFF(MINUTE, I.SWIPE_IN_OUT_TIME, @Now) AS TimeSpent
FROM @emp_swipe_rec I
WHERE SWIPE_TYPE = 'I'
-- Rule out any where a closing record in the future exists
AND NOT EXISTS (
SELECT 1
FROM @emp_swipe_rec O
WHERE O.EMPLOYEE_ID = I.EMPLOYEE_ID
AND O.TASK_ID = I.TASK_ID
AND SWIPE_TYPE = 'O'
AND O.SWIPE_IN_OUT_TIME > I.SWIPE_IN_OUT_TIME
);

使用时间戳返回以下内容,该时间戳给出了40min -但不确定您是如何得出130min的:

tbody> <<tr>1
EMPLOYEE_IDTASK_IDTimeSpent
22520
340

相关内容

  • 没有找到相关文章

最新更新