MySQL поддерживает TIMESTAMPDIFF:
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
Вы можете использовать его, чтобы указать количество часов или дробных часов между двумя датами
Если вы хотите достаточно точныйПо прошествии указанного количества часов вы можете запросить количество секунд между двумя делениями и разделить результат на 3600
Если вы делаете отчеты, в которых рассчитывается, сколько часов работал сотрудник в неделю или в месяц,группировать по работникам и неделям / месяцам и суммировать часы.Чтобы уменьшить дату до недели или месяца, используйте функцию YEAR () и функции MONTH () или WEEK ()
Пример:
SELECT emp_id, year(login_time), month(login_time), sum(timestampdiff(second, login_time, logout_time)/3600.0)
FROM timeclock
WHERE logout_time > ‘0000-00-00’
GROUP BY
employee_id, year(login_time), month(login_time)
Замените неделю в месяце, если вынужен еженедельный отчет
Вот отчет, в котором указывается время входа в систему и выхода из системы на каждую дату, а также часы, отработанные в этот день:
SELECT emp_id, year(login_time), month(login_time), day(login_time), min(login_time), max(logout_time), sum(timestampdiff(second, login_time, logout_time)/3600.0)
FROM timeclock
WHERE logout_time > ‘0000-00-00’
GROUP BY
employee_id, year(login_time), month(login_time), day(login_time)