SQL回炉系列(三) 拆分原始数据到对应的月份表中
2015-11-23 10:38
363 查看
存放原始数据的表,需要定期把历史数据迁移并固定保存下来,否则原始数据表越来越大,不利于数据的频繁插入和查询。
下面的SQL语句是一个存储过程,每日0点执行,把前一天或前几天的数据迁移到对应的月份表中。
SQL回炉系列(一) 序言
SQL回炉系列(二) 多表联合查询和排序
SQL回炉系列(三) 拆分原始数据到对应的月份表中
SQL回炉系列(四) 删除重复数据
SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据
下面的SQL语句是一个存储过程,每日0点执行,把前一天或前几天的数据迁移到对应的月份表中。
USE [PRODMS] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[SplitOriginalValue] AS BEGIN DECLARE @day int,@month int,@year int DECLARE @tbname varchar(35),@sql NVarchar(4000),@parmas Nvarchar(2000) SELECT @day= datepart (dd,min(getTime)) ,@month=datepart(mm,min(getTime)),@year=datepart(YEAR,min(getTime)) from CF_OriginalData IF(@month<10) SET @tbname='CF_OriginalData_'+Convert(varchar(4),@year)+'_0'+Convert(varchar(2),@month) ELSE SET @tbname='CF_OriginalData_'+Convert(varchar(4),@year)+'_'+Convert(varchar(2),@month) --如果不存在该月份的表名需要新建一个该月份的表 IF not exists(select * from sysobjects where name=@tbname) BEGIN set @sql=' create Table '+@tbname+' ( AutoId int identity (1,1) primary key, UA decimal(10,2), UB decimal(10,2), UC decimal(10,2), IA decimal(10,2), IB decimal(10,2), IC decimal(10,2), py decimal(10,2), Qw decimal(10,2), pf decimal(10,2), EP decimal(12,2), back varchar(5), F decimal(10,2), getTime dateTime, Number Nvarchar(20) )' execute ( @sql) END IF @day<DATEPART(dd,getdate()) and @month=DATEPART(mm,getdate()) -- 判断OriginalData中最早的数据是否小于今天且是同一个月的 BEGIN -- 插入数据到月份表中 SET @sql=' insert into ' +@tbname+' (UA, UB, UC, IA, IB, IC, py, Qw, pf, EP, back, F, getTime, Number ) select UA, UB, UC, IA, IB, IC, py, Qw, pf, EP, back, F, getTime, Number from CF_OriginalData where Convert(varchar(10),getTime,120)<= Convert(varchar(10),dateAdd(dd,-1,getdate()),120)' execute ( @sql) -- 删除OriginalData中的数据 DELETE FROM CF_OriginalData where Convert(varchar(10),getTime,120)<= Convert(varchar(10),dateAdd(dd,-1,getdate()),120) END ELSE -- 新的月份 BEGIN SET @sql=' insert into ' +@tbname +' ( UA, UB, UC, IA, IB, IC, py, Qw, pf, EP, back, F, getTime, Number ) ' + ' select UA, UB, UC, IA, IB, IC, py, Qw, pf, EP, back, F, getTime, Number from CF_OriginalData where DATEPART(dd,getTime)= @days ' execute ( @sql) -- 删除OriginalData中的数据 DELETE FROM CF_OriginalData WHERE DATEPART(dd,getTime)= @day and DATEPART(mm,getTime)= @month and DATEPART(yyyy,getTime)= @year END END
SQL回炉系列(一) 序言
SQL回炉系列(二) 多表联合查询和排序
SQL回炉系列(三) 拆分原始数据到对应的月份表中
SQL回炉系列(四) 删除重复数据
SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据
相关文章推荐
- sql sum等函数
- H2数据库攻略
- SQL回炉系列(二) 多表联合查询和视图
- Memcached笔记——(一)安装&常规错误&监控
- WAMPP安装后mysql无法启动
- SQL语句
- MySQL数据库读写分离的简单方法
- Hive之insert into 和insert overwrite
- PL/SQL正确选择游标类型
- 简洁的MysqlHelper
- Mysql分库分表方案
- Oracle--用户管理与权限分配
- ORACLE用JDBC操作CLOB
- oracle分配权限 学习笔记--转载
- PL/SQL开发中动态SQL的使用方法
- 基于Oracle的高性能动态SQL程序开发
- SQL 回炉系列(一)
- 动态SQL和PL/SQL的EXECUTE选项分析
- spring + redis 实现数据的缓存
- Memcached在使用中常用到的方法