-2
我制作了一个SP来计算每个员工每月的迟到人数。我面临的问题是,当用户坐在中午12:00之后,我无法获得最后一次打卡时间,因为我们的时间机器需要在凌晨12:00之前被强制打出来,如果在此之后您要坐下来。我们又必须在凌晨12点05分进场。我做了,直到然而,查询如下:查询逻辑计数员工在sql server中每个月的迟到数量
SELECT (CASE WHEN CONVERT(CHAR(5), PunchInTime, 108) <= '09:05'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) < '20:00'
THEN 'On Time'
WHEN CONVERT(CHAR(5), PunchInTime, 108) > '09:05'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) < '20:00'
THEN 'Late'
WHEN CONVERT(CHAR(5), PunchInTime, 108) <= '09:05'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) < '21:00'
THEN 'On Time'
WHEN CONVERT(CHAR(5), PunchInTime, 108) <= '10:05'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) < '21:00'
THEN 'On Time'
WHEN CONVERT(CHAR(5), PunchInTime, 108) > '10:05'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) < '21:00'
THEN 'Late'
WHEN CONVERT(CHAR(5), PunchInTime, 108) <= '10:35'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) < '22:00'
THEN 'On Time'
WHEN CONVERT(CHAR(5), PunchInTime, 108) > '10:35'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) < '22:00'
THEN 'Late'
WHEN CONVERT(CHAR(5), PunchInTime, 108) <= '02:05'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) >= '22:00'
THEN 'On Time'
WHEN CONVERT(CHAR(5), PunchInTime, 108) > '02:05'
AND CONVERT(CHAR(5), DATEADD(day, -1, PunchOutTime), 108) BETWEEN '22:00' AND '00:00'
THEN 'Late'
ELSE 'No record found'
END) AS Status, *
FROM dbo.LaunchPad_TimeHistory ;
这里我使用day - 1
逻辑,但它在那种情况下作为该员工的样片日期更改失败。请在这方面提供帮助。
表结构是:
Status ID EmpID PunchInTime PunchOutTime LastAccessTime ForcedPunchOut Notes
On Time 1 100 2015-04-23 18:00:00:0000 2015-04-23 18:00:00:0000 2015-04-23 12:23:41 0 ABC
请发表您的表结构样品的输入和输出预计在时间戳的差异。 – ughai
预期输出只是每日增加的所有位的计数值,以显示您本月已经晚了5次或本月已经6次了。 –
那么每个员工每天有一行? – ughai