SQL Как правильно использовать оператор where в моем запросе?

0

Существует просьба о 15-минутных интервалах в интервале с 09.00 до 18.00.

SELECT t.event_date,             
case                                                                         
  when TIME_TO_SEC(t.event_date) > inter.begin AND TIME_TO_SEC(t.event_date) < inter.end                           
  then floor((TIME_TO_SEC(t.event_date) - inter.begin) / inter.width)           

  when TIME_TO_SEC(t.event_date) <= inter.begin 
  then 0  

  when TIME_TO_SEC(t.event_date) >= inter.end 
  then floor((inter.end - inter.begin) / inter.width)  

  else null 

end as full_interval_number       
FROM table t,                     
    (select TIME_TO_SEC('09:00:00') as begin,  
            TIME_TO_SEC('18:00:00') as end,    
            TIME_TO_SEC('00:15:00') as width
     ) inter 

Как использовать ГДЕ, чтобы исключить временные затраты №0, 3, 7, 15 или пересчет с 09.00 до 10.00?

Что-то вроде этого:

where
       TIME_TO_SEC(event_date) < TIME_TO_SEC('09:00:00') 
and TIME_TO_SEC(event_date) > TIME_TO_SEC('10:00:00') 

или же:

where
 full_interval_number not in (0, 3, 7, 15)
  • 1
    Ваш запрос работает должным образом, кроме предложения where? Какова точная проблема с предложенным предложением где?
  • 0
    Как и в этом запросе, используйте где
Показать ещё 1 комментарий
Теги:
database

1 ответ

0

Это то, что вы хотите? Первая часть - общий предел для 9-18, а вторая часть - это особое требование исключить значения между 9-10

where TIME_TO_SEC(event_date) between TIME_TO_SEC('09:00:00') and TIME_TO_SEC('18:00:00')
and not (TIME_TO_SEC(event_date) between TIME_TO_SEC('09:00:00') and TIME_TO_SEC('10:00:00'))

Полный запрос

SELECT t.event_date,             
case                                                                         
  when TIME_TO_SEC(t.event_date) > inter.begin AND TIME_TO_SEC(t.event_date) < inter.end                           
  then floor((TIME_TO_SEC(t.event_date) - inter.begin) / inter.width)           

  when TIME_TO_SEC(t.event_date) <= inter.begin 
  then 0  

  when TIME_TO_SEC(t.event_date) >= inter.end 
  then floor((inter.end - inter.begin) / inter.width)  

  else null 

end as full_interval_number       
FROM table t,                     
(select TIME_TO_SEC('09:00:00') as begin,  
        TIME_TO_SEC('18:00:00') as end,    
        TIME_TO_SEC('00:15:00') as width
 ) inter 
where TIME_TO_SEC(event_date) between TIME_TO_SEC('09:00:00') and TIME_TO_SEC('18:00:00')
and not (TIME_TO_SEC(event_date) between TIME_TO_SEC('09:00:00') and TIME_TO_SEC('10:00:00'))
  • 0
    точно, но как мне использовать его в моем запросе?
  • 0
    Просто добавьте его в конец (я обновил свой ответ)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню