Как запланировать запрос MySQL? - PullRequest
20 голосов
/ 08 марта 2012

Могу ли я запланировать выполнение задачи с заданным интервалом в MySQL?

У меня есть база данных инвентаризации MySQL.Структура выглядит следующим образом:

table_1            fields: itmcode, avgcost
table_2            fields: itmcode(FK to table_1(itmcode)), quantity

Основой отчета является случай, когда я хочу, чтобы данные деталей инвентаризации были мудрыми для прошедшей даты.изменяется при публикации новой покупки в системе.Я могу выполнить запрос, чтобы увидеть текущую оценку запасов, но я хочу, чтобы оценка запасов также была доступна на предыдущую дату.Как я могу это сделать?Что касается количества, я могу добавить продажи и вычесть покупки в обратном направлении от текущей даты до любой даты, требуемой в отчете, но средняя стоимость действительна, так как она обновляется каждый раз при публикации покупки.может быть выполнен автоматический ежедневный дамп, подобный следующему:

SELECT itmcode, quantity, avgcost, (avgcost * quantity) as ttlval
FROM table_1 
JOIN table_2 ON table_1.itmcode = table_2.itmcode

Можно ли запланировать эту задачу непосредственно в MySQL или есть какое-то другое решение?

Ответы [ 2 ]

41 голосов
/ 10 марта 2012

у вас есть 2 основных варианта (как минимум):

1, посмотрите на Event Scheduler

Сначала создайте таблицу, например.stock_dumps с полями

код товара, количество, avgcost, ttlval, dump_date (DATETIME)

CREATE EVENT `Dumping_event` ON SCHEDULE
        EVERY 1 DAY
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT ''
    DO BEGIN
INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date)
SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW()
  FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode;
END

Пожалуйста, следуйте инструкциям по включению планировщика по ссылке, размещенной выше.Примечание: Старые версии mysql не имеют планировщика событий

2, Создать задание cron / запланированное задание Windows:

Создать файл sql:

INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date)
SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW()
FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode;

запланировать эту команду:

mysql -uusername -ppassword < /path/to/sql_file.sql
1 голос
/ 01 января 2017

Для этого доступны универсальные инструменты, такие как EyeShare или AutoSQL.net .EyeShare - это более универсальный инструмент автоматизации ИТ-процессов, а AutoSQL - это специализированный инструмент, специально предназначенный для планирования запросов и их вывода (в Excel или CSV).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...