根据一张表的两个时间的字段,根据对应字段生成其它三个字段,通过表的自联接可以做得到,但是会出现些意想不到的问题,最终解决的办法---通过存储过程。
数据库表 CREATE TABLE `box_mobile_log_active_` ( `id` int(11) NOT NULL AUTO_INCREMENT, `boxId` int(11) NOT NULL, `channelId` int(11) NOT NULL, `fatherChannelId` int(11) NOT NULL, `appId` int(11) NOT NULL, `cpId` int(11) NOT NULL, `active_day` datetime NOT NULL, `createTime` datetime DEFAULT NULL, `active_num` int(11) NOT NULL, `theDay` int(11) DEFAULT '0', `secondDay` int(11) DEFAULT '0', `thirdDay` int(11) DEFAULT '0', `active_num_rate` decimal(10,4) NOT NULL DEFAULT '0.0000', `province` varchar(80) NOT NULL, `city` varchar(80) NOT NULL, `updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=113234 DEFAULT CHARSET=utf8;
存储过程 :
use box_oms; CREATE PROCEDURE `sp_box_mobile_active_log_test`(IN v_day int) BEGIN DECLARE v_done1 INT DEFAULT 0; DECLARE v_theDay,v_secondDay,v_thirdDay,v_active_num,v_active_num_rate INT DEFAULT 0; DECLARE v_boxId,v_channelId,v_fatherChannelId,v_appId,v_cpId INT; DECLARE v_createTime,v_active_day varchar(10); DECLARE v_province,v_city varchar(20); DECLARE v_activeList CURSOR FOR SELECT a.boxId boxId,c.id channelId,c.fatherId fatherChannelId,a.appId appId,d.cpId cpId,DATE(a.installTime),DATE(a.updateTime) active_day,COUNT(a.id) active_num,COUNT(a.id) active_num,a.province province,a.city city FROM box_mobile_log_sum a,box_market.channel_box b,box_market.channel_box_chinfo c,box_market.res_app d WHERE a.appId = d.id AND a.boxId = b.boxId AND b.channelId=c.id GROUP BY DATE(a.installTime),DATE(a.updateTime),a.boxId,a.appId; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done1 = 1; INSERT IGNORE INTO box_mobile_log_sum SELECT * FROM box_log.box_mobile_log a where a.updateTime>DATE_SUB(CURDATE(),INTERVAL v_day DAY) AND a.updateTime<=DATE_SUB(CURDATE(),INTERVAL -1 DAY); CALL sp_filter(2); -- CALL sp_rehab_mobile_active_installday; -- 生成激活统计表 TRUNCATE TABLE box_mobile_log_active_; OPEN v_activeList; REPEAT FETCH v_activeList INTO v_boxId,v_channelId,v_fatherChannelId,v_appId,v_cpId,v_createTime,v_active_day,v_active_num,v_active_num_rate,v_province,v_city; IF v_done1 != 1 THEN IF to_days(v_createTime)=to_days(v_active_day) THEN SET v_theDay=v_active_num; ELSEIF (to_days(v_createTime)+1)=to_days(v_active_day) THEN SET v_secondDay=v_active_num; ELSEIF (to_days(v_createTime)+2)=to_days(v_active_day) THEN SET v_thirdDay=v_active_num; END IF; INSERT INTO box_mobile_log_active_ (boxId,channelId,fatherChannelId,appId,cpId,createTime,active_day,active_num,active_num_rate,province,city,theDay,secondDay,thirdDay) VALUES(v_boxId,v_channelId,v_fatherChannelId,v_appId,v_cpId,v_createTime,v_active_day,v_active_num,v_active_num_rate,v_province,v_city,v_theDay,v_secondDay,v_thirdDay); SET v_theDay=0; SET v_secondDay=0; SET v_thirdDay=0; END IF; UNTIL v_done1 = 1 END REPEAT; CLOSE v_activeList; COMMIT; END
相关推荐
本项目似乎涉及到一个使用Delphi编程语言开发的应用,其目标是根据特定的数据库表(包含3个字段)生成一个TreeView控件,以展示层级关系。以下是关于这个主题的详细知识: 1. **TreeView控件**:TreeView控件在...
假设我们有一个复杂的数据库环境,其中包含多个表,并且每个表中有多个字段。现在我们需要找到一个特定值(例如:'610012')出现在哪些表中的哪些字段里。这个问题可以通过编写动态SQL来解决。 #### 二、技术原理 ...
标题 "随机拖动字段生成数据分析报表" 描述了该功能的主要特点,即随机拖动字段块到三个模块区域中,并生成对应的数据分析报表。 标签 "vue3 前端" 表明该资源使用了 Vue 3 框架作为前端开发框架。 在部分内容中,...
标题“数据库字段自动生成拼音Delphi源码”指的是一个Delphi编程项目,其核心功能是为数据库中的字段生成对应的拼音简码或全拼码。在处理中文数据时,这种功能非常实用,尤其在构建搜索、索引或者进行中文数据处理的...
在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于为表的主键字段生成唯一的标识符。在大型数据库系统中,它们是管理序列化和唯一性的重要工具。本篇文章将深入探讨如何在Oracle中生成...
开发者只需通过工具连接到数据库,选择相应的表,工具就能根据表结构自动生成对应的实体类代码,包括属性(对应字段)、构造函数、属性访问器(Get和Set方法)等。 C#是.NET框架的主要编程语言,它支持面向对象编程...
2. 使用Eclipse的代码生成功能为这些字段生成Getter/Setter方法。 3. 检查生成的方法是否带有正确的中文注释。 #### 六、注意事项 - 在进行此类修改时,务必确保备份相关文件,以免造成不可恢复的损失。 - 修改后的...
本案例聚焦于使用Groovy脚本语言来实现一个特定的功能:从明细表中提取字段值,并将其更新到主表对应的字段中。这样的操作对于数据同步、报表生成以及业务流程自动化等场景非常常见。 Groovy是一种动态、灵活的Java...
- **示例场景**:假设我们要在VA05这个标准报表中增加“欠交货数量”、“客户物料”等字段。 - **操作步骤**: - 打开VA05报表。 - 在报表显示的字段列表中,找到需要添加字段的位置。 - 按下F1键,弹出的帮助...
表中的每一行称为一个记录,每列称为一个字段。关系数据库设计包括确定表结构、字段属性和表间关系等。 1. 表(Table):存储数据的基本单位,每个表有唯一的表名。 2. 字段(Field):表的列,表示数据项的名称和...
这些工具通常需要用户指定数据库连接信息、表名,然后它们会根据表结构生成VO类。 在生成VO类的过程中,需要注意以下几点: - 数据类型转换:数据库中的数据类型需要转换为Java类型,例如,数据库中的`INT`对应...
例如,如果数据库中有一个名为"users"的表,包含"id"(int类型)、"username"(varchar类型)和"email"(varchar类型)三个字段,那么生成的JavaBean可能如下: ```java public class User { private int id; ...
“代码modle部分枚举相关表内容”意味着在生成的Model层代码中,会根据数据库中的每个表自动创建对应的类,并将表的字段映射为类的属性。枚举可能是为了表示特定的数据类型,例如状态、类别等,这样可以使代码更加...
1. **SQL查询目的**:本查询旨在从数据库系统表中提取表结构的相关信息,包括字段名称、类型、长度、是否为主键等属性,并根据这些信息生成文档。 2. **查询字段解析** - `=CaseWhenA.colorder=1ThenD.nameElse''...
例如,如果我们有一个包含城市人口数据的图层,我们可以按人口数量字段将城市分为高、中、低三个人口密度等级,并分别导出这三个等级的城市数据。 在ArcGIS 10中,可以使用“toolbox工具箱”来实现这个功能。...
数据表的名字中如果存在“_”或空格,会自动清除,每一字段生成一个对应的属性,同样会去除“_”和空格,表中的外键字段除生成一个对应属性外,还会生成一个外键实体属性,如class_id,除生成ClassId属性外,还生成...
只需提供数据库连接信息,生成器就会根据表结构创建对应的C#类,每个类包含与表字段相对应的属性,以及可能的验证规则和关系映射。 三层架构,也称为N层架构,是软件设计中常用的一种模式,包括表示层(UI)、业务...
然后,我们可以编写一个方法,根据这些字段生成Excel工作表: ```java public void generateExcel(List<User> users) { // 创建Excel工作簿和工作表 Workbook workbook = new XSSFWorkbook(); // 使用Apache POI...
在这个例子中,我们定义了一个名为Customers的表,包含三个字段:CustomerID(主键)、FirstName(非空)和LastName,以及Email(唯一)。 至于“实体类”,这是面向对象编程中的一个重要概念,尤其是在使用ORM...
这个数据库对照表提供了数据库中的各个字段的中文解释,帮助用户更好地理解和处理与数据库相关的问题。 1. **用友U8系统简介** 用友U8是一款由用友网络科技股份有限公司开发的企业资源规划(ERP)软件,广泛应用于...