ALTER Таблица и добавить интервалы

0

У меня есть таблица со следующими данными и структурой:

Date       Analyst      Start Time   Stop Time
4/2/2018   Bill Smith   7:00         10:00

Мне нужно увеличить время начала и время остановки, чтобы быть разбитым на 30-минутные интервалы. Итоговый стол должен выглядеть следующим образом:

Date       Analyst      Start Time   Stop Time
4/2/2018   Bill Smith   7:00         7:30
4/2/2018   Bill Smith   7:30         8:00
4/2/2018   Bill Smith   8:00         8:30
4/2/2018   Bill Smith   8:30         9:00
4/2/2018   Bill Smith   9:00         9:30
4/2/2018   Bill Smith   9:30         10:00

Есть ли способ, которым я могу достичь этого, используя MySQL в запросе?

  • 0
    Не с запросом, но вы можете сделать это в хранимой процедуре. Это вариант?
  • 0
    Да ... Я мог бы сделать хранимую процедуру. Можете ли вы предоставить какую-либо информацию о хранимой процедуре или указать мне некоторую документацию, которая поможет в моих поисках?
Показать ещё 1 комментарий
Теги:

2 ответа

0

Поскольку один из комментариев предполагает, что это довольно широкая тема, однако по-прежнему можно настроить вас на путь выполнения этой задачи, поскольку вы говорите так, будто у вас есть проблема.

Разбейте его на этапы.

Во-первых, вам понадобится таблица для работы с (tableB), которая позволит вам записывать вновь созданные записи временных интервалов. Это должно соответствовать схеме существующей таблицы (tableA). Это проще и безопаснее писать во вторую таблицу, чем сложнее, со смесью обновлений и вставок, если вы пытаетесь работать только с существующей таблицей.

Во-вторых, определите процедуру. Основная структура примерного курсора в документации идеально подходит для ваших потребностей, как только вы вычеркиваете все ссылки на cur2 и IF b < c THEN... END IF; блок.

Вы должны следовать точной структуре примера и начинать с объявления переменных для каждого из столбцов в таблице. Объявление для cur1 должно выбрать все столбцы из таблицы A. Вам нужно обработать строки, возвращаемые курсором в LOOP, как в примере, но для этого вам нужно определить блок WHILE... END WHILE. Если вы вызвали переменные vDate, vAnalyst, vStartTime и vStopTime, тогда блок WHILE выглядел бы примерно так:

WHILE vStartTime < vStopTime DO
  INSERT INTO tableB ('date','analyst','startTime','stopTime') 
    VALUES (vDate,vAnalyst,vStartTime, ADDTIME(vStartTime, '00:30:00'));
  SET vStartTime := ADDTIME(vStartTime, '00:30:00'); 
END WHILE;

ВЫЗЫВАЙТЕ процедуру, и вы должны заполнить таблицуB необходимыми записями временных интервалов.

Наконец, когда вы довольны определением и записями в tableB, отмените таблицу A и переименуйте tableB в tableA.

0

Я сделал эту хранимую процедуру для вас, единственное, что вы можете улучшить, - это объединить все результаты в один (если это возможно).

CREATE PROCEDURE test()
BEGIN
DECLARE vFecIni DATETIME;
DECLARE vFecFin DATETIME;
SET vFecIni = CONCAT(DATE(NOW()),' ', '00:00:00');
SET vFecFin = CONCAT(DATE(NOW()),' ', '00:00:00') + INTERVAL 1 DAY;
    WHILE vFecIni < vFecFin DO
        SELECT vFecIni;
        SET vFecIni = vFecIni + INTERVAL 30 MINUTE;
    END WHILE;
END;

Ещё вопросы

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