Я бы вообще не реализовал это как запланированное задание - я заставил бы код работать со сценарием в зависимости от даты его обработки.
Изменение состояния системы на этом уровне означает, что вы попадете в беспорядок, если не произойдет опрокидывание.Это также означает, что вы не можете легко измерить исторические данные.
Трудно сказать, как именно вы должны реализовать это, не понимая больше, что делает система.Одним из способов было бы жестко закодировать логику, например, в MySQL ....
SELECT emp_id,
STRTODATE(CONCAT(DATE_FORMAT(clock_in_time, '%Y-%m-%d '),
IF(DATE_FORMAT(clock_in_time, '%m')
BETWEEN '05' AND '08', '08:00', '09:00')))
AS expected_clockin,
clock_in_time AS actual
FROM clockin
или в качестве альтернативы использовать таблицу поиска ....
SELECT a.emp_id,
STRTODATE(CONCAT(DATE_FORMAT(a.clock_in_time, '%Y-%m-%d '),
b.start_time)
AS expected_clockin,
a.clock_in_time AS actual
FROM clockin a INNER JOIN lookup b
ON a.clock_in_time BETWEEN b.period_start AND b.period_end