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