mysql 表结构是instid、ts、o、h、l、c、vol、confirm、k5、k10、k20、k40 现在需要用存储储存过程批量修改k5、k10、k20、k40其中k5等于前5个c得和除5k10等于前10个c得和除10k20等于前20个c得和除20k40等于前50个c得和除40表名动态传入
可以编写一个存储过程来批量修改k5、k10、k20、k40字段的值。以下是一个示例存储过程的代码:
DELIMITER //
CREATE PROCEDURE update_k_values(IN table_name VARCHAR(255))
BEGIN
SET @sql = CONCAT('UPDATE ', table_name, ' SET k5 = (SELECT SUM(c) / 5 FROM (SELECT c FROM ', table_name, ' ORDER BY ts LIMIT 5) AS t), k10 = (SELECT SUM(c) / 10 FROM (SELECT c FROM ', table_name, ' ORDER BY ts LIMIT 10) AS t), k20 = (SELECT SUM(c) / 20 FROM (SELECT c FROM ', table_name, ' ORDER BY ts LIMIT 20) AS t), k40 = (SELECT SUM(c) / 40 FROM (SELECT c FROM ', table_name, ' ORDER BY ts LIMIT 40) AS t);');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
在这个存储过程中,表名是通过参数传入的。存储过程内部使用动态SQL来构建UPDATE语句,通过子查询获取前5、10、20、40个记录的c字段值的和,并将其除以相应的数字赋值给k5、k10、k20、k40字段。
要调用这个存储过程,可以使用以下语法:
CALL update_k_values('your_table_name');
将'your_table_name'替换为实际的表名即可。
原文地址: https://www.cveoy.top/t/topic/i9QU 著作权归作者所有。请勿转载和采集!