根据一张表的两个时间的字段,根据对应字段生成其它三个字段,通过表的自联接可以做得到,但是会出现些意想不到的问题,最终解决的办法---通过存储过程。
数据库表 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. 检查生成的方法是否带有正确的中文注释。 #### 六、注意事项 - 在进行此类修改时,务必确保备份相关文件,以免造成不可恢复的损失。 - 修改后的...
这些工具通常需要用户指定数据库连接信息、表名,然后它们会根据表结构生成VO类。 在生成VO类的过程中,需要注意以下几点: - 数据类型转换:数据库中的数据类型需要转换为Java类型,例如,数据库中的`INT`对应...
本案例聚焦于使用Groovy脚本语言来实现一个特定的功能:从明细表中提取字段值,并将其更新到主表对应的字段中。这样的操作对于数据同步、报表生成以及业务流程自动化等场景非常常见。 Groovy是一种动态、灵活的Java...
- **示例场景**:假设我们要在VA05这个标准报表中增加“欠交货数量”、“客户物料”等字段。 - **操作步骤**: - 打开VA05报表。 - 在报表显示的字段列表中,找到需要添加字段的位置。 - 按下F1键,弹出的帮助...
表中的每一行称为一个记录,每列称为一个字段。关系数据库设计包括确定表结构、字段属性和表间关系等。 1. 表(Table):存储数据的基本单位,每个表有唯一的表名。 2. 字段(Field):表的列,表示数据项的名称和...
1. **SQL查询目的**:本查询旨在从数据库系统表中提取表结构的相关信息,包括字段名称、类型、长度、是否为主键等属性,并根据这些信息生成文档。 2. **查询字段解析** - `=CaseWhenA.colorder=1ThenD.nameElse''...
例如,如果数据库中有一个名为"users"的表,包含"id"(int类型)、"username"(varchar类型)和"email"(varchar类型)三个字段,那么生成的JavaBean可能如下: ```java public class User { private int id; ...
总而言之,VS代码自动生成器是一个强大的工具,它能够根据数据库表结构快速生成三层架构的前端页面和后端服务代码。它通过使用存储过程和枚举来提高代码的效率和可读性,从而大幅提升开发效率并确保代码质量。在实际...
例如,如果我们有一个包含城市人口数据的图层,我们可以按人口数量字段将城市分为高、中、低三个人口密度等级,并分别导出这三个等级的城市数据。 在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)软件,广泛应用于...