Si todos los datos a restar y sumar están en la base, es posible obtener la sumatoria de horas simplemente haciendo la consulta correcta, ya que MySQL, como todos los DBMS, tiene funciones de fecha y hora que sirven para tales propósitos.
Supongamos que necesitas saber las horas trabajadas por un empleado en un mes, o por mes (el método es parecido), y en la tabla INGRESOS_EGRESOS_EMPELADOS tienes el ID del empleado, y la fecha y hora de ingreso y egreso, representada por DATETIMEs. La consulta que devuelve las horas trabajadas por empleado podría ser:
Si hubiese que separar por mes y año, ordenando por año y mes, por ejemplo, sería:
Si sólo quieres la de un mes de un año determinado, supongamos Agosto de 2010:
Como verás, la estructura base de la consulta es la misma, lo que varía es la forma de desagregación de los datos.
En este ejemplo uso tres funciones:
TIMESTAMDIFF(unidad, datetime1, datetime2) devuelve el numero de
unidad representado por la diferencia entre fechas.
SUM(),por fuera de la anterior, suma los valores obtenidos por la función interna.
SEC_TO_TIME() crea un TIME sobre la base de una cantidad X de segundos, en este caso representado por la suma de segundos ya obtenida.
Hay otras funciones posibles de usar para esta consulta, pero esta es una forma comprensible y simple de explicar.