【发布时间】:2020-03-03 06:54:58
【问题描述】:
您好,我正在尝试编写查询,根据他/她从 tblshiftsched 的轮班时间表,我将给出每个员工大于 10 的持续时间计数。
Shift A - 6AM - 2PM
Shift B - 2PM - 10PM
Shift C - 10PM - 6AM
tbleeventlogs
EVENTID USERID DATE_TIME READERID READERNAME LOGTYPE RESULT DURATION
188110074 50078 2020-03-02 22:01:31 544381441 LOCKER IN 00:12 12
188099752 50078 2020-03-02 21:48:52 544381436 LOCKER OUT
188098672 50078 2020-03-02 21:47:10 544381441 LOCKER IN
188098656 50078 2020-03-02 21:47:06 544381441 LOCKER IN 15:45 945
187972279 50078 2020-03-02 06:01:54 544381436 LOCKER OUT
187949027 50078 2020-03-02 04:30:46 544381441 LOCKER IN 00:16 16
187933475 50078 2020-03-01 22:44:47 544381431 LOCKER IN 00:04 4
187933289 50078 2020-03-01 22:40:41 544381436 LOCKER OUT
187926256 50078 2020-03-01 22:01:31 544381431 LOCKER IN 00:14 14
187914503 50078 2020-03-01 21:46:42 544381428 LOCKER OUT
180769437 1214201592 2020-01-20 08:13:06 544381436 LOCKER OUT
180771730 1214201592 2020-01-20 08:36:38 544381431 LOCKER IN 00:23 23
180775099 1214201592 2020-01-20 09:07:04 544381436 LOCKER OUT
180777340 1214201592 2020-01-20 09:30:53 544381431 LOCKER IN 00:23 23
180778948 1214201592 2020-01-20 09:48:58 544381436 LOCKER OUT
180781714 1214201592 2020-01-20 10:04:52 544381431 LOCKER IN 00:15 15
tblemployeegroup
EMPLOYEEID EMPLOYEENAME GROUPCODE
050078 ARCIAGA, SC-G3-4G
1214201592 CALMA, VILMA LARIN ASSR2*
003502 ORRICA, MARY MELIN ACBA1
tblshiftsched
SHIFTCODE DATESHIFT STARTSHIFT ENDSHIFT ISRESTDAY
SC-G3-4G 1/24/2020 1/1/1970 2:00:00.000000 PM 1/1/1970 10:00:00.000000 PM 0
SC-G3-4G 1/25/2020 1/1/1970 2:00:00.000000 PM 1/1/1970 10:00:00.000000 PM 0
SC-G3-4G 1/26/2020 1/1/1970 2:00:00.000000 PM 1/1/1970 10:00:00.000000 PM 0
SC-G3-4G 1/27/2020 1/1/1970 2:00:00.000000 PM 1/1/1970 10:00:00.000000 PM 0
SC-G3-4G 2/10/2020 1/1/1970 10:00:00.000000 PM 1/1/1970 6:00:00.000000 AM 0
SC-G3-4G 2/11/2020 1/1/1970 10:00:00.000000 PM 1/1/1970 6:00:00.000000 AM 0
SC-G3-4G 2/12/2020 1/1/1970 10:00:00.000000 PM 1/1/1970 6:00:00.000000 AM 0
我能够计算数据,但它是按每个日期计算的,我的问题是我只捕获 Shift A 和 Shift B,因为我每天获取数据而 Shift C 需要 2 天
如果用户在 3 月 2 日晚上 10 点到 3 月 3 日早上 6 点是 Shift C i,则它跨越数天
SELECT a.userid, a.username,
TRUNC (TO_DATE (a.date_time, 'YYYY-MM-DD HH24:MI:SS')
) AS date_time,
COUNT (a.DURATION) COUNT
FROM tblaccesslogs a
WHERE DURATION > 10
GROUP BY a.username,
a.userid,
TRUNC (TO_DATE (a.date_time, 'YYYY-MM-DD HH24:MI:SS'));
注意这和我之前的问题my previous question有关
希望你明白我的意思
更新 我有查询,但我无法确定该员工是早/晚入还是早/晚出。 因此,如果他在 A 班迟到了,则算作 B 班,因为他在 B 班的时间迟到了。
SELECT a.userid, a.username,
TRUNC(TO_DATE(A.DATE_TIME,'YYYY-MM-DD HH24:MI:SS')) AS DATE_TIME,
case when to_char(TO_DATE (a.date_time, 'YYYY-MM-DD HH24:MI:SS'),'HH24') between 6 and 13 then 'A'
when to_char(TO_DATE (a.date_time, 'YYYY-MM-DD HH24:MI:SS'),'HH24') between 14 and 21 then 'B'
else 'C' end as shift,
COUNT (a.DURATION) COUNT
FROM tblaccesslogs a
WHERE DURATION > 10
GROUP BY a.username,
a.userid,
TRUNC(TO_DATE(A.DATE_TIME,'YYYY-MM-DD HH24:MI:SS')),
case when to_char(TO_DATE (a.date_time, 'YYYY-MM-DD HH24:MI:SS'),'HH24') between 6 and 13 then 'A'
when to_char(TO_DATE (a.date_time, 'YYYY-MM-DD HH24:MI:SS'),'HH24') between 14 and 21 then 'B'
else 'C' end
【问题讨论】:
-
我完全迷路了。班次都是8小时。你说的持续时间是多少?
-
tbleventlogs 中的持续时间,我想加入 tbleventlogs 以了解员工每天的轮班时间表