SELECT t.event_date, -- атрибут таблицы типа datetime, для которого определяем интервал, выведен для того, чтобы наблюдать за процессом отладки
case -- SQL-конструкция вида "case when ... then ... else ... end", с помощью которой можно выводить не только конкретное значение атрибута, но и задавать условие, при котором конечное значение результата будет вычисляться по-разному в пределах одной выбранной записи.
when TIME_TO_SEC(t.event_date) > inter.begin AND TIME_TO_SEC(t.event_date) < inter.end -- если t.event_date, выраженное в суточных секундах, находится в периоде (inter.begin, 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 -- то, по текущей дате t.event_date ноль интервалов
when TIME_TO_SEC(t.event_date) >= inter.end -- если время больше или равно окончанию периода, ...
then floor((inter.end - inter.begin) / inter.width) -- ...то выдаем кол-во интервалов
else null -- по идее, сюда никогда не попадем, а вдруг?
end as full_interval_number -- кол-во прошедших полных интервалов, начинается с 0
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 -- параметрический подзапрос, все настраиваемые константы в одном месте - удобно при отладке SELECT *
from (SELECT
servers.id,
servers.game,
servers.votes,
@n := @n + 1 AS rank
FROM servers , (SELECT @n := 0) r
WHERE game like 'minecraft'
ORDER BY servers.votes DESC
) abs where id = 3