Skip to content
Advertisement

Count Data each shift schedule

Hi i’m trying to write query that will give me the count of duration that is greater than 10 each employee depending on his/her Shift schedule from tblshiftsched.

Shift A - 6AM - 2PM
Shift B - 2PM - 10PM
Shift C - 10PM - 6AM 

tbleventlogs

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

i able to count data but its by each date and my problem is i only capture Shift A and Shift B because i get the data per day and Shift C takes 2 day

if the user is Shift C i on march 2 10 PM to March 3 6 AM it spans days

 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'));

Note this is related to my previous question my previous question

Hope you understand what i mean

UPDATE i have the query but i i can’t identify if the employee is early/late IN or early/late OUT. So if he is late out on shift A it count as shift B because he out on the time of Shift 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

Advertisement

Answer

Your query does not capture any shift, try something like this:

SELECT   a.userid, a.username,
            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,
            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

(I did not try the code, so may have left a ‘(‘ or something like that, I also left the to_date and did not extract the HH component just in case you have other formats than shown)

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement