>我有以下存储过程来计算运行平均值。但是,当调用时,它会永远运行。
delimiter //
CREATE PROCEDURE run_avg(date_start DATE,date_end DATE,pol_id TINYINT,sta_id TINYINT)
NOT DETERMINISTIC
CONTAINS SQL
BEGIN
TRUNCATE average_table;
WHILE date_start <= date_end DO
INSERT INTO average_table(value_avg)
SELECT AVG(a.value) as val
FROM (SELECT value FROM obs_all_unik
WHERE start_time >=date_start
AND start_time < date_start + INTERVAL 8 HOUR
AND polutant_id=pol_id
AND station_id=sta_id) AS a;
SET date_start = date_start + INTERVAL 1 HOUR;
END WHILE;
END;//
delimiter ;
有什么想法吗?
INDEX(station_id, polution_id, start_date)
将有助于性能。
只在表中插入平均值而不插入这些值似乎是错误的:station_id, polution_id, start_date
.
无限循环是由于date_start作为 DATE 的错误定义。由于我试图按小时递增,因此它返回了一个相同的值。我将其更改为时间戳,现在问题消失了。