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 ;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM