Приветствую, господа!
Появилась задачка, которую я в php могу решить буквально двумя строками, но стало интересно организовать всё это дело в SQL-запросе.
Предположим, что смена сотрудника длится сутки, с 10:00 до 10:00. Задача: выбрать записи за текущую смену. То есть, если сейчас >= 10 часов, то выбрать с 10:00 текущего дня до 10:00 завтрашнего. И если сейчас < 10 часов, то с 10:00 вчерашнего дня до 10:00 текущего. Пока дошел до такого решения, которое не особо мне нравится:
SELECT * FROM `some_table`
WHERE
`datetime_field`
BETWEEN
CASE
WHEN
HOUR( NOW( ) ) >= 10
THEN
DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00')
ELSE
DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -1 DAY), '%Y-%m-%d 10:00')
END
AND
CASE
WHEN
HOUR( NOW( ) ) >= 10
THEN
DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 10:00')
ELSE
DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00')
END
Вопрос, собственно, заключается в том, как можно (
если можно) оптимизировать данный запрос?