Существует просьба о 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)
Это то, что вы хотите? Первая часть - общий предел для 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'))