У меня есть таблица с именем TIMINGS
---------------- create ------------- ---
CREATE TABLE TIMINGS(
SNO TINYINT UNIQUE NOT NULL AUTO_INCREMENT,
TIMINGTYPE VARCHAR(20) PRIMARY KEY,
STARTTIME TIME NOT NULL,
ENDTIME TIME NOT NULL
)
------------------ вставка ------------- --------
INSERT INTO TIMINGS(TIMINGTYPE, STARTTIME, ENDTIME) VALUES
('BREAKFAST','08:34:00','10:00:00'),
('LUNCH','11:30:00','13:30:00'),
('DINNER','19:00:00','20:30:00');
, поэтому я хочу знать TIMINGTYPE в соответствии с текущим временем и, если следующий TIMINGTYPE
ex. : если текущее время между началом завтрака и окончанием завтрака, то должно возвращаться 'BREAKFAST' и следующий TIMINGTYPE
Ожидаемый результат, например: * 10101 *
----------------------------------------------------------
CURRENTTIME | NEXT
-----------------------------------------------------------
1. BREAKFAST | LUNCH
-----------------------------------------------------------
, поэтому я сделал запрос, который работает согласно моему требованию:
---------------------- выберите ------------- ---------------
SELECT (
CASE
WHEN DATE_FORMAT(CONVERT_TZ(NOW(),'+00:00','+05:30') ,'%H:%i:%s' ) BETWEEN (select STARTTIME from TIMINGS where TIMINGTYPE = 'BREAKFAST') AND (select ENDTIME from TIMINGS where TIMINGTYPE = 'BREAKFAST') THEN 'BREAKFAST'
WHEN DATE_FORMAT(CONVERT_TZ(NOW(),'+00:00','+05:30') ,'%H:%i:%s' ) BETWEEN (select STARTTIME from TIMINGS where TIMINGTYPE = 'LUNCH') AND (select ENDTIME from TIMINGS where TIMINGTYPE = 'LUNCH') THEN 'LUNCH'
WHEN DATE_FORMAT(CONVERT_TZ(NOW(),'+00:00','+05:30') ,'%H:%i:%s' ) BETWEEN (select STARTTIME from TIMINGS where TIMINGTYPE = 'DINNER') AND (select ENDTIME from TIMINGS where TIMINGTYPE = 'DINNER') THEN 'DINNER'
ELSE 'NOT AVAILABLE'
END
) as CURRENTTIME,
(
CASE
WHEN DATE_FORMAT(CONVERT_TZ(NOW(),'+00:00','+05:30') ,'%H:%i:%s' ) BETWEEN (select ENDTIME from TIMINGS where TIMINGTYPE = 'BREAKFAST') AND (select STARTTIME from TIMINGS where TIMINGTYPE = 'LUNCH') THEN 'LUNCH'
WHEN DATE_FORMAT(CONVERT_TZ(NOW(),'+00:00','+05:30') ,'%H:%i:%s' ) BETWEEN (select ENDTIME from TIMINGS where TIMINGTYPE = 'LUNCH') AND (select STARTTIME from TIMINGS where TIMINGTYPE = 'DINNER') THEN 'DINNER'
ELSE 'BREAKFAST'
END) as NEXT
Итак, мой вопрос, могу ли я сделать его более эффективным? Если да, то как!
ПРИМЕЧАНИЕ: я использую MySql
Любая помощь будет принята с благодарностью. Спасибо!