2012-03-08 24 views
15

¿Puedo programar una tarea para que se ejecute en un intervalo específico en MySQL?¿Cómo programar una consulta MySQL?

Tengo una base de datos de inventario MySQL. La estructura es la siguiente:

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

la base del informe es cuando quiero el inventario detalles de valoración elemento sabia para una fecha pasada.

Los campos avgcost y quantity cambian cuando se registra una nueva compra en el sistema. Puedo ejecutar una consulta para ver la valoración de stock actual, pero también quiero poder ver la valoración de stock en una fecha anterior. ¿Cómo puedo hacer eso? Para la cantidad, puedo agregar las ventas y deducir las compras hacia atrás desde la fecha actual hasta la fecha que requiera el informe, pero el promedio es actual, ya que esto se actualiza cada vez que se publica una compra.

Me preguntaba si un volcado automático diario podría ser ejecutado, similar a esto:

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

¿Es esta tarea posible programar directamente en MySQL o hay alguna otra solución?

Respuesta

32

tienes 2 opciones básicas (al menos):

1, miren Event Scheduler

En primer lugar crear la tabla, por ejemplo. stock_dumps con campos

itemcode, cantidad, 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 

Por favor, siga las instrucciones de cómo activar el planificador de enlace publicado anteriormente. Nota: Las versiones antiguas de MySQL no tienen caso planificador

2, Crear tarea cron/ventanas trabajo programado:

crear el archivo 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; 

horario de este comando:

mysql -uusername -ppassword < /path/to/sql_file.sql 
+1

¿Cuál es la versión mínima de MySQL para admitir el programador de eventos? – Lucky

+3

http://dev.mysql.com/doc/refman/5.1/en/events.html: "Se agregó soporte para eventos en MySQL 5.1.6" – rkosegi

1

Hay herramientas genéricas disponibles como EyeShare o AutoSQL.net para hacer esto. EyeShare es una herramienta de automatización de procesos de TI más genérica y AutoSQL es una herramienta de propósito único específicamente para programar consultas y enviarlas (a Excel o CSV).

Cuestiones relacionadas