У меня есть следующая структура таблицы с дневными сменами.
Только в смену C время делится на два дня.
Как вы можете C Смена начинается в 20: 30 и заканчивается в следующие дни 06: 00 .
Структура таблицы и данные следующим образом
create table `machine_shifts` (
`date` date ,
`shift_start_time` time ,
`shift_end_time` time ,
`shift` varchar (60),
`updated_on` timestamp
);
insert into `machine_shifts` (`date`, `shift_start_time`, `shift_end_time`, `shift`, `updated_on`) values('2010-01-01','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-01','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-01','22:30:00','06:00:00','C','2020-01-29 15:37:26'),
('2010-01-02','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-02','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-02','22:30:00','06:00:00','C','2020-01-29 15:37:26'),
('2010-01-03','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-03','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-03','22:30:00','06:00:00','C','2020-01-29 15:37:26'),
('2010-01-04','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-04','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-04','22:30:00','06:00:00','C','2020-01-29 15:37:27');
Данные представлены следующим образом:
Теперь, что я хотел, Я хочу получить данные между двумя заданными временными рамками, которые включают смещение из вышеуказанного набора данных. И у меня есть следующий запрос
SELECT * FROM machine_shifts
WHERE ((CONCAT(`date`, ' ', shift_start_time))
BETWEEN '2010-01-02 00:00:00' AND '2010-01-03 10:00:00')
OR (CONCAT(`date`, ' ', shift_end_time)
BETWEEN '2010-01-02 00:00:00' AND '2010-01-03 10:00:00')
ORDER BY `date`, shift_start_time ASC
С помощью вышеприведенного запроса я получаю
В приведенном выше наборе результатов, последняя строка не ожидалась и не должна отображаться. Я также хочу получить C смещение 2010-01-01 в первой строке, хотя я передаю 2010-01-02 00:00:00 должно упасть под C смещение 2010-01-01.
Это следующий результат, который я ожидаю
Как мне его достичь?