Check-in/Out Monthly

PHOTO EMBED

Mon Dec 09 2024 10:03:22 GMT+0000 (Coordinated Universal Time)

Saved by @Taimoor

SELECT 
    source.employee AS `Employee`,
    source.employee_name AS `Employee Name`,
    TabEmployee.department AS `Department`,
    TabEmployee.designation AS `Designation`,
    TabEmployee.branch AS `Branch`,
    source.From_Date AS `From Date`,
    source.To_Date AS `To Date`,
    source.Day_1_IN AS `Day 1 IN`,
    source.Day_1_OUT AS `Day 1 OUT`,
    source.Day_2_IN AS `Day 2 IN`,
    source.Day_2_OUT AS `Day 2 OUT`,
    source.Day_3_IN AS `Day 3 IN`,
    source.Day_3_OUT AS `Day 3 OUT`,
    source.Day_4_IN AS `Day 4 IN`,
    source.Day_4_OUT AS `Day 4 OUT`,
    source.Day_5_IN AS `Day 5 IN`,
    source.Day_5_OUT AS `Day 5 OUT`,
    source.Day_6_IN AS `Day 6 IN`,
    source.Day_6_OUT AS `Day 6 OUT`,
    source.Day_7_IN AS `Day 7 IN`,
    source.Day_7_OUT AS `Day 7 OUT`,
    source.Day_8_IN AS `Day 8 IN`,
    source.Day_8_OUT AS `Day 8 OUT`,
    source.Day_9_IN AS `Day 9 IN`,
    source.Day_9_OUT AS `Day 9 OUT`,
    source.Day_10_IN AS `Day 10 IN`,
    source.Day_10_OUT AS `Day 10 OUT`,
    source.Day_11_IN AS `Day 11 IN`,
    source.Day_11_OUT AS `Day 11 OUT`,
    source.Day_12_IN AS `Day 12 IN`,
    source.Day_12_OUT AS `Day 12 OUT`,
    source.Day_13_IN AS `Day 13 IN`,
    source.Day_13_OUT AS `Day 13 OUT`,
    source.Day_14_IN AS `Day 14 IN`,
    source.Day_14_OUT AS `Day 14 OUT`,
    source.Day_15_IN AS `Day 15 IN`,
    source.Day_15_OUT AS `Day 15 OUT`,
    source.Day_16_IN AS `Day 16 IN`,
    source.Day_16_OUT AS `Day 16 OUT`,
    source.Day_17_IN AS `Day 17 IN`,
    source.Day_17_OUT AS `Day 17 OUT`,
    source.Day_18_IN AS `Day 18 IN`,
    source.Day_18_OUT AS `Day 18 OUT`,
    source.Day_19_IN AS `Day 19 IN`,
    source.Day_19_OUT AS `Day 19 OUT`,
    source.Day_20_IN AS `Day 20 IN`,
    source.Day_20_OUT AS `Day 20 OUT`,
    source.Day_21_IN AS `Day 21 IN`,
    source.Day_21_OUT AS `Day 21 OUT`,
    source.Day_22_IN AS `Day 22 IN`,
    source.Day_22_OUT AS `Day 22 OUT`,
    source.Day_23_IN AS `Day 23 IN`,
    source.Day_23_OUT AS `Day 23 OUT`,
    source.Day_24_IN AS `Day 24 IN`,
    source.Day_24_OUT AS `Day 24 OUT`,
    source.Day_25_IN AS `Day 25 IN`,
    source.Day_25_OUT AS `Day 25 OUT`,
    source.Day_26_IN AS `Day 26 IN`,
    source.Day_26_OUT AS `Day 26 OUT`,
    source.Day_27_IN AS `Day 27 IN`,
    source.Day_27_OUT AS `Day 27 OUT`,
    source.Day_28_IN AS `Day 28 IN`,
    source.Day_28_OUT AS `Day 28 OUT`,
    source.Day_29_IN AS `Day 29 IN`,
    source.Day_29_OUT AS `Day 29 OUT`,
    source.Day_30_IN AS `Day 30 IN`,
    source.Day_30_OUT AS `Day 30 OUT`,
    source.Day_31_IN AS `Day 31 IN`,
    source.Day_31_OUT AS `Day 31 OUT`
FROM 
    (SELECT
        employee,
        employee_name,
        DATE_FORMAT(MIN(time), '%d-%m-%Y') AS `From_Date`,
        DATE_FORMAT(MAX(time), '%d-%m-%Y') AS `To_Date`,
        MAX(CASE WHEN DAY(time) = 1 THEN min_time END) AS `Day_1_IN`,
        MAX(CASE WHEN DAY(time) = 1 THEN max_time END) AS `Day_1_OUT`,
        MAX(CASE WHEN DAY(time) = 2 THEN min_time END) AS `Day_2_IN`,
        MAX(CASE WHEN DAY(time) = 2 THEN max_time END) AS `Day_2_OUT`,
        MAX(CASE WHEN DAY(time) = 3 THEN min_time END) AS `Day_3_IN`,
        MAX(CASE WHEN DAY(time) = 3 THEN max_time END) AS `Day_3_OUT`,
        MAX(CASE WHEN DAY(time) = 4 THEN min_time END) AS `Day_4_IN`,
        MAX(CASE WHEN DAY(time) = 4 THEN max_time END) AS `Day_4_OUT`,
        MAX(CASE WHEN DAY(time) = 5 THEN min_time END) AS `Day_5_IN`,
        MAX(CASE WHEN DAY(time) = 5 THEN max_time END) AS `Day_5_OUT`,
        MAX(CASE WHEN DAY(time) = 6 THEN min_time END) AS `Day_6_IN`,
        MAX(CASE WHEN DAY(time) = 6 THEN max_time END) AS `Day_6_OUT`,
        MAX(CASE WHEN DAY(time) = 7 THEN min_time END) AS `Day_7_IN`,
        MAX(CASE WHEN DAY(time) = 7 THEN max_time END) AS `Day_7_OUT`,
        MAX(CASE WHEN DAY(time) = 8 THEN min_time END) AS `Day_8_IN`,
        MAX(CASE WHEN DAY(time) = 8 THEN max_time END) AS `Day_8_OUT`,
        MAX(CASE WHEN DAY(time) = 9 THEN min_time END) AS `Day_9_IN`,
        MAX(CASE WHEN DAY(time) = 9 THEN max_time END) AS `Day_9_OUT`,
        MAX(CASE WHEN DAY(time) = 10 THEN min_time END) AS `Day_10_IN`,
        MAX(CASE WHEN DAY(time) = 10 THEN max_time END) AS `Day_10_OUT`,
        MAX(CASE WHEN DAY(time) = 11 THEN min_time END) AS `Day_11_IN`,
        MAX(CASE WHEN DAY(time) = 11 THEN max_time END) AS `Day_11_OUT`,
        MAX(CASE WHEN DAY(time) = 12 THEN min_time END) AS `Day_12_IN`,
        MAX(CASE WHEN DAY(time) = 12 THEN max_time END) AS `Day_12_OUT`,
        MAX(CASE WHEN DAY(time) = 13 THEN min_time END) AS `Day_13_IN`,
        MAX(CASE WHEN DAY(time) = 13 THEN max_time END) AS `Day_13_OUT`,
        MAX(CASE WHEN DAY(time) = 14 THEN min_time END) AS `Day_14_IN`,
        MAX(CASE WHEN DAY(time) = 14 THEN max_time END) AS `Day_14_OUT`,
        MAX(CASE WHEN DAY(time) = 15 THEN min_time END) AS `Day_15_IN`,
        MAX(CASE WHEN DAY(time) = 15 THEN max_time END) AS `Day_15_OUT`,
        MAX(CASE WHEN DAY(time) = 16 THEN min_time END) AS `Day_16_IN`,
        MAX(CASE WHEN DAY(time) = 16 THEN max_time END) AS `Day_16_OUT`,
        MAX(CASE WHEN DAY(time) = 17 THEN min_time END) AS `Day_17_IN`,
        MAX(CASE WHEN DAY(time) = 17 THEN max_time END) AS `Day_17_OUT`,
        MAX(CASE WHEN DAY(time) = 18 THEN min_time END) AS `Day_18_IN`,
        MAX(CASE WHEN DAY(time) = 18 THEN max_time END) AS `Day_18_OUT`,
        MAX(CASE WHEN DAY(time) = 19 THEN min_time END) AS `Day_19_IN`,
        MAX(CASE WHEN DAY(time) = 19 THEN max_time END) AS `Day_19_OUT`,
        MAX(CASE WHEN DAY(time) = 20 THEN min_time END) AS `Day_20_IN`,
        MAX(CASE WHEN DAY(time) = 20 THEN max_time END) AS `Day_20_OUT`,
        MAX(CASE WHEN DAY(time) = 21 THEN min_time END) AS `Day_21_IN`,
        MAX(CASE WHEN DAY(time) = 21 THEN max_time END) AS `Day_21_OUT`,
        MAX(CASE WHEN DAY(time) = 22 THEN min_time END) AS `Day_22_IN`,
        MAX(CASE WHEN DAY(time) = 22 THEN max_time END) AS `Day_22_OUT`,
        MAX(CASE WHEN DAY(time) = 23 THEN min_time END) AS `Day_23_IN`,
        MAX(CASE WHEN DAY(time) = 23 THEN max_time END) AS `Day_23_OUT`,
        MAX(CASE WHEN DAY(time) = 24 THEN min_time END) AS `Day_24_IN`,
        MAX(CASE WHEN DAY(time) = 24 THEN max_time END) AS `Day_24_OUT`,
        MAX(CASE WHEN DAY(time) = 25 THEN min_time END) AS `Day_25_IN`,
        MAX(CASE WHEN DAY(time) = 25 THEN max_time END) AS `Day_25_OUT`,
        MAX(CASE WHEN DAY(time) = 26 THEN min_time END) AS `Day_26_IN`,
        MAX(CASE WHEN DAY(time) = 26 THEN max_time END) AS `Day_26_OUT`,
        MAX(CASE WHEN DAY(time) = 27 THEN min_time END) AS `Day_27_IN`,
        MAX(CASE WHEN DAY(time) = 27 THEN max_time END) AS `Day_27_OUT`,
        MAX(CASE WHEN DAY(time) = 28 THEN min_time END) AS `Day_28_IN`,
        MAX(CASE WHEN DAY(time) = 28 THEN max_time END) AS `Day_28_OUT`,
        MAX(CASE WHEN DAY(time) = 29 THEN min_time END) AS `Day_29_IN`,
        MAX(CASE WHEN DAY(time) = 29 THEN max_time END) AS `Day_29_OUT`,
        MAX(CASE WHEN DAY(time) = 30 THEN min_time END) AS `Day_30_IN`,
        MAX(CASE WHEN DAY(time) = 30 THEN max_time END) AS `Day_30_OUT`,
        MAX(CASE WHEN DAY(time) = 31 THEN min_time END) AS `Day_31_IN`,
        MAX(CASE WHEN DAY(time) = 31 THEN max_time END) AS `Day_31_OUT`
     FROM 
         (SELECT
              employee,
              employee_name,
              DATE(time) AS time,
              TIME_FORMAT(MIN(TIME(time)), '%H:%i') AS min_time,
              TIME_FORMAT(MAX(TIME(time)), '%H:%i') AS max_time
          FROM `tabEmployee Checkin`
          WHERE 
              TRUE
              [[AND time >= {{From_date}}]]
              [[AND time <= DATE_ADD({{To_date}}, INTERVAL 1 DAY)]]
          GROUP BY
              employee,
              employee_name,
              DATE(time)
         ) AS inner_source
     GROUP BY
         employee,
         employee_name
    ) AS source
LEFT JOIN 
    `tabEmployee` TabEmployee 
ON 
    source.employee = TabEmployee.employee
WHERE 
    (TabEmployee.branch = {{Branch}} OR {{Branch}} IS NULL)
LIMIT 1048575;
content_copyCOPY