天天看點

mysql 求時間段平均值

考慮下面的需求,在一段時間内,間隔一段時間,取一個平均值,把所有的平均值取出來,怎麼辦?

思路:在存儲過程中,拼接sql語句。根據起始時間和結束時間,while循環每次加一段時間。

DROP PROCEDURE IF EXISTS `get_avg`;

DELIMITER ;;

CREATE DEFINER=`root`@`%` PROCEDURE `get_avg`(in iStartTime datetime, in iEndTime datetime)

BEGIN

declare vSql varchar(10240) default '';

declare vNextTime datetime;

while(iStartTime < iEndTime) do

-- 每次加一個小時

set vNextTime = date_add(iStartTime,interval 3600 second);

-- 單引号是特殊字元,要表示單引号,使用 '' 進行轉義

set vSql = concat(vSql,'union select 100, avg(`value`) from t1 where time between ''',iStartTime,''' and ''', vNextTime,''' ');

set iStartTime = vNextTime;

end while;

set vSql = substring(vSql,7);

-- 看看拼接的字元串是否正确

-- select vSql;

set @vSql = vSql;

prepare stmt from @vSql;

execute stmt;

deallocate prepare stmt;

END

;;

DELIMITER ;