使用事件计划和存储过程自动平均每小时 MySQL

Tia*_*Tia 2 mysql stored-procedures mysql-event

我在 Mysql Workbench 中有一个每秒更新的天气数据库。它包含温度和风速。这是我的数据库:

CREATE TABLE `test`.`new_table` (
`id` INT(10) NOT NULL,
`date` DATETIME NOT NULL,
`temperature` VARCHAR(25) NOT NULL,
`wind_speed` VARCHAR(25) NOT NULL,
`humidity` VARCHAR(25) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
Run Code Online (Sandbox Code Playgroud)

我想找到每小时的平均温度并将结果插入到一个新表中,如下所示

CREATE TABLE `test`.`table1` (
`idsea_state` INT(10) NOT NULL,
`dateavg` DATETIME NOT NULL,
`avg_temperature` VARCHAR(25) NOT NULL,
PRIMARY KEY (`idsea_state`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
Run Code Online (Sandbox Code Playgroud)

这是我的编码,用于查找平均值并将结果插入新表中

INSERT INTO `table1`
(`dateavg`, `avg_temperature`) 
SELECT `date` , avg(`temperature`)
FROM   `new_table`
GROUP BY DATE( date ), HOUR( date );
Run Code Online (Sandbox Code Playgroud)

这是我的存储过程代码

USE `test`;
DROP procedure IF EXISTS `new_procedure`;

DELIMITER $$ 
USE `test`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`()  
BEGIN
  INSERT INTO `table1`
   (`dateavg`, `avg_temperature`) 
  SELECT `date` , avg(`temperature`)
  FROM   `new_table`
  GROUP By DATE( date ), HOUR( date );
 END$$

 DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

问题是我希望这个编码平均每小时自动运行一次,我应该使用存储过程和事件调度程序吗?请帮助我,我不知道如何在 Mysql Workbench 中使用事件调度程序。

Rol*_*DBA 5

在 MySQL 中运行它

SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud)

添加此内容,my.cnf以便调度程序在 mysql 重新启动时保持启用状态

[mysqld]
event_scheduler = ON
Run Code Online (Sandbox Code Playgroud)

在下一小时开始事件,使其每小时重复一次,调整WHERE条款

CREATE EVENT hourly_temp_avg
    ON SCHEDULE
    EVERY HOUR
    STARTS DATE(NOW()) + INTERVAL (HOUR(NOW())+1) HOUR
    ON COMPLETION PRESERVE
DO
INSERT INTO `table1` (`dateavg`, `avg_temperature`) 
SELECT `DATE` , avg(`temperature`)
FROM `new_table`
WHERE `date` >= NOW() - INTERVAL 1 HOUR;
Run Code Online (Sandbox Code Playgroud)

马苏德首先提出了正确的概念。所以,他从我这里得到+1。