zoukankan      html  css  js  c++  java
  • mysql 多日志表结果集合拼接存储过程

    通常单天的日志 仅仅记录当天的日志信息,假设须要查看一月内的日志信息须要对每天的日志表结果集合进行拼接,通经常使用到 union 。

    储存过程:

    drop PROCEDURE if  EXISTS unionSp;
    DELIMITER //
    create procedure unionSp(sTime varchar(32), eTime varchar(32),tchema varchar(32))
    
    begin
    
    declare sqlVar varchar(1024000);
    declare rest int;
    declare tableName varchar(1024);
    
    set rest = 100;
    set sqlVar='';
    
    while rest > 0 do
      
     set sTime = (select DATE_FORMAT((select ADDDATE(sTime,1)),'%Y%m%d'));
     set tableName=CONCAT('tbl_req_',sTime);
    
     select count(1) from information_schema.tables where table_name = tableName  and TABLE_SCHEMA=tchema into @cnt;
     if @cnt != 0 then
    
    	if rest=1 then
    		 set sqlVar=CONCAT(sqlVar,' SELECT DISTINCT channel_id,app_id from tbl_req_',sTime);
    	ELSE
    		 set sqlVar=CONCAT(sqlVar,' SELECT DISTINCT channel_id,app_id from tbl_req_',sTime,' UNION');
    	END IF;
    
    END if;
    
    set rest = DATEDIFF(eTime,sTime);
    
    END while;
    
    set @v_s=sqlVar;
    prepare stmt from @v_s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    
    
    end;
    
    // 
    DELIMITER;
    
    call unionSp('20140730','20140930','biz_date')

    union:联合的意思,即把两次或多次查询结果合并起来。
     要求:两次查询的列数必须一致
     推荐:列的类型能够不一样,但推荐查询的每一列,想相应的类型以一样
     能够来自多张表的数据:多次sql语句取出的列名能够不一致,此时以第一个sql语句的列名为准。


     假设不同的语句中取出的行,有全然同样(这里表示的是每一个列的值都同样),那么union会将同样的行合并,终于仅仅保留一行。也能够这样理解,union会去掉反复的行。


    假设不想去掉反复的行,能够使用union all 


  • 相关阅读:
    (8)闭包函数(函数的传参方式)
    (7)名称空间和作用域
    (6)函数嵌套
    (5)函数对象
    (4)进阶函数(作用域、闭包、生成器、迭代器)
    (3)什么是函数(函数的定义、形参、实参、默认形参、可变长函数args kwargs,私有地址)
    (1)三元运算、字符编码
    (2)字符编码关系和转换(bytes类型)
    java技术学习网址收藏
    springmvc工作原理和环境搭建
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6869495.html
Copyright © 2011-2022 走看看