Vika7
@Vika7
вебист

Запрос периода времени в течение дня?

Извиняюсь за ламерский вопрос, нужен простой запрос к БД (MySql) с выводом количества 15 минутных интервалов в период времени с 09.00 по 18.00 часов, и записью их всех по отдельным строкам таблицы с полем minut_15 (Timestamp).
  • Вопрос задан
  • 1206 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT CONCAT(`h`.`hour`, ':', `m`.`minute`, ':00')
FROM (
  SELECT '09' AS `hour`
  UNION SELECT '10'
  UNION SELECT '11'
  UNION SELECT '12'
  UNION SELECT '13'
  UNION SELECT '14'
  UNION SELECT '15'
  UNION SELECT '16'
  UNION SELECT '17'
) AS `h`
JOIN (
  SELECT '00' AS `minute`
  UNION SELECT '15'
  UNION SELECT '30'
  UNION SELECT '45'
) AS `m`
Ответ написан
@alexalexes
Если вам нужно дать номер интервала для каждой записи, то вот запрос.
Потом используйте любую группировку и аналитику для расширения запроса, как вам удобно.
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)           -- ... то вычисляем количество полных  интервалов
  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                    -- параметрический подзапрос, все настраиваемые константы в одном месте - удобно при отладке
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы