有表:cap_meter_detail

字段:recordtime

情景:recordtime每半个小时记录一次,故一天会产生很很多数据,我们要做的是,每天00:00:00对cap_meter_detail 按时间拆分,比如,今天是2018年09月10号,那就将所有recordtime的日期为2018-09-10的拆分到表cap_meter_detail _20180610

思路:1、建表 cap_meter_detail _20180610

2、从cap_meter_detail 找出date(recordtime)="2018-09-10"的所有数据,插入到cap_meter_detail _20180610

3、将插入的数据从cap_meter_detail 里面删除

由于可能某个时间段数据库出问题,没有及时删除,所以,我们需要做个循环,用存储过程的思路解决,如下图,找出来有11天的,那就要循环11次

步骤:

1、写存储过程myFun_cap_meter_detail

BEGIN  

-- 定义变量
DECLARE tableName_bl VARCHAR(50);
-- 定义done
DECLARE done INT; -- 定义表名(tableName)游标
DECLARE rs_tableName CURSOR FOR -- 得到游标集合
SELECT
-- recordtime,
-- GROUP_CONCAT(id) ammeterid_group,
-- DATE_FORMAT(recordtime, '%Y%m%d'),
CONCAT('cap_meter_detail_',DATE_FORMAT(recordtime, '%Y%m%d')) tableName
FROM
`cap_meter_detail`
WHERE
recordtime < DATE(NOW())
GROUP BY
DATE_FORMAT(recordtime, '%Y%m%d'); DECLARE CONTINUE HANDLER FOR SQLSTATE '' SET done=1; -- 初始化done,为0,false
set done = 0; open rs_tableName;
REPEAT FETCH rs_tableName into tableName_bl; -- 将类似 2018-03-19 00:22:00的数据插入到 cap_meter_20180319
if done<>1 then SET @var= tableName_bl; -- 建表 SET @createTableSqlStr=CONCAT("CREATE TABLE ",tableName_bl,"
(
id int(11) NOT NULL AUTO_INCREMENT,
ammeterid int(11) DEFAULT NULL,
a_voltage double(11,2) DEFAULT NULL,
b_voltage double(11,2) DEFAULT NULL,
c_voltage double(11,2) DEFAULT NULL,
frequence double(11,2) DEFAULT NULL,
a_current double(11,2) DEFAULT NULL,
b_current double(11,2) DEFAULT NULL,
c_current double(11,2) DEFAULT NULL,
total_power_factor double(11,2) DEFAULT NULL,
a_power_factor double(11,2) DEFAULT NULL,
b_power_factor double(11,2) DEFAULT NULL,
c_power_factor double(11,2) DEFAULT NULL,
total_active_power double(11,2) DEFAULT NULL,
a_active_power double(11,2) DEFAULT NULL,
b_active_power double(11,2) DEFAULT NULL,
c_active_power double(11,2) DEFAULT NULL,
total_reactive_power double(11,2) DEFAULT NULL,
a_reactive_power double(11,2) DEFAULT NULL,
b_reactive_power double(11,2) DEFAULT NULL,
c_reactive_power double(11,2) DEFAULT NULL,
recordtime datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=51927530 DEFAULT CHARSET=utf8"); -- 查看函数
SELECT @createTableSqlStr; -- 执行函数
PREPARE createTableSqlStr FROM @createTableSqlStr;
EXECUTE createTableSqlStr; -- 插入 SET @insertSqlStr=CONCAT("INSERT INTO ",tableName_bl,
" SELECT * FROM cap_meter_detail WHERE recordtime < DATE(NOW()) AND DATE_FORMAT(recordtime, '%Y%m%d')=right('",@var,"',8)"); -- 查看函数
SELECT @insertSqlStr; -- 执行函数
PREPARE insertSqlStr FROM @insertSqlStr;
EXECUTE insertSqlStr; -- 删除 SET @deleteSqlStr=CONCAT("DELETE FROM cap_meter_detail WHERE recordtime < DATE(NOW()) AND DATE_FORMAT(recordtime, '%Y%m%d')=right('",@var,"',8)"); -- 查看函数
SELECT @deleteSqlStr;
-- 执行函数
PREPARE deleteSqlStr FROM @deleteSqlStr;
EXECUTE deleteSqlStr; end if; -- 直到done变为true结束循环
UNTIL done END
REPEAT;
close rs_tableName;
END

2、写事件:myEvent_cap_meter_detail

CREATE EVENT
IF NOT EXISTS myEvent_cap_meter_detail ON SCHEDULE EVERY 24 HOUR ON COMPLETION PRESERVE DO
CALL myFun_cap_meter_detail();

3、启用事件

-- 查看事件状态
SHOW VARIABLES LIKE '%event_scheduler%'; -- 启用事件
SET GLOBAL event_scheduler =1

  

最新文章

  1. 学习iOS
  2. Ubuntu 16.10 虚拟机安装记录
  3. Java 函数参数传递方式详解 分类: Java Game 2014-08-15 06:34 82人阅读 评论(0) 收藏
  4. (转载)UITableView的详细讲解
  5. Signs of a poorly written jQuery plugin 翻译 (Jquery插件开发注意事项,Jquey官方推荐)
  6. 学习面试题Day02
  7. 【转载】setjmp和longjmp函数使用详解
  8. 扩展PHP内置的异常处理类
  9. unity静态批处理原理理解
  10. org.w3c.dom.Element 缺少 setTextContent 步骤
  11. java 之 简单工厂模式(大话设计模式)
  12. Longest Palindrome 最长回文串问题
  13. web安全之机器学习入门——3.2 决策树与随机森林
  14. Scrum Meeting day 4
  15. JavaScript中的短路
  16. 浅析Sql Server参数化查询
  17. 【Unity】第9章 粒子系统
  18. 解决Windows 8.1 应用商店中安装程序挂起的解决
  19. Springboot+ajax传输json数组以及单条数据的方法
  20. 打包jar问题

热门文章

  1. jQuery ajax中的get请求方法汇总
  2. Android设备管理器 DevicePolicyManager
  3. poi word 转html (.DOC .DOCX )
  4. java 02 内部类
  5. 三、Chrome开发者工具详解(3)-Timeline面板
  6. WebBrowser内嵌页面的跨域调用问题
  7. Tomcat-redis-Nginx
  8. 第一节:Java 语言基础
  9. ubuntu的 mysql 存储目录迁移
  10. 《剑指offer》面试题17—合并两个排序链表