List员工使用自连接的分钟数



我有一个SQL Server表emp_swipe_rec它只有6列。我想知道员工A和B今天(过去24小时)工作了多少时间(以分钟为单位)。员工A已经打卡下班了。员工B还在工作。我们不会为滑入/滑出存储两个不同的列。我们使用swipe_type (I - In/O- Out)来确定员工是否仍在工作或退出。

我需要查询的两个输出。每名员工在过去24小时内刷卡的总工作时间。(在过去24小时内,员工都是刷卡入/刷卡出的)列出目前正在工作的员工,以及他们在签到前的总工作时间。(过去24小时内只刷卡入,不刷卡出)

Emp_Swipe_Rec_PK3

我认为这满足了你的第一个要求"过去24小时内每位刷卡员工的总工作时间">

返回员工1的一条记录,因为这是唯一一个有签出的员工(在2021年8月!?)

因为这使用了一个窗口函数,你需要使用SQL Server 2012或更高版本,你已经标记了2008和2012

;WITH SwipeIns AS
(
SELECT  Employee_ID,
Employee_Name,
Swipe_In_Out_Time
FROM    emp_swipe_rec 
WHERE   Swipe_Type = 'I' AND
Swipe_In_Out_Time > DATEADD(HOUR,-24,GETDATE()) AND
Swipe_In_Out_Time < GETDATE()
),
SwipeOuts AS
(
SELECT  Employee_ID,
Swipe_In_Out_Time
FROM    emp_swipe_rec 
WHERE   Swipe_Type = 'O' AND
Employee_ID IN (SELECT Employee_ID FROM SwipeIns) AND
Swipe_In_Out_Time > DATEADD(HOUR,-24,GETDATE())
)
SELECT  Employee_ID,
Employee_Name,
SwipeIn,
SwipeOut,
DATEDIFF(MINUTE,SwipeIn,SwipeOut) AS Duration
FROM    (
SELECT  i.Employee_ID,
i.Employee_Name,
i.Swipe_In_Out_Time AS SwipeIn,
o.Swipe_In_Out_Time AS SwipeOut,
ROW_NUMBER() OVER (PARTITION BY i.Employee_ID ORDER BY o.Swipe_In_Out_Time) AS RowN
FROM    SwipeIns i
JOIN SwipeOuts o
ON i.Employee_ID = o.Employee_ID
) a
WHERE   RowN = 1

还有,为什么你的表没有规范化?你没有员工表吗?EmployeeName和Department是冗余的

最新更新