Pasted image 20241112142946.png
WITH

-- CTE
WITH time_emp(emp_id,In_time,Out_time) AS (
SELECT emp_id,
MAX(CASE WHEN action = 'in' THEN time END) AS In_time,
MAX(CASE WHEN action = 'out' THEN time END) AS Out_time
FROM hospital
GROUP BY emp_id)

SELECT * FROM time_emp WHERE In_time > Out_time OR Out_time IS NULL

Pasted image 20241112143257.png

-- CTE smart ans.
WITH latest_time AS 
(SELECT emp_id, MAX(time) AS max_latest_time FROM hospital GROUP BY emp_id), latest_in_time AS (SELECT emp_id,MAX(time) AS max_in_time FROM hospital WHERE action = 'in' GROUP BY emp_id)

SELECT * FROM latest_time lt INNER JOIN latest_in_time lit ON lt.emp_id = lit.emp_id AND max_latest_time = max_in_time

CASE WHEN

-- Having
SELECT 
    emp_id,
    MAX(CASE
        WHEN action = 'in' THEN time
    END) AS In_time,
    MAX(CASE
        WHEN action = 'Out' THEN time
    END) AS Out_time
FROM
    hospital
GROUP BY emp_id
HAVING In_time > out_time OR Out_time IS NULL;