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 


  • 相关阅读:
    【学习】018 Spring框架
    【学习】017 Mybatis框架
    【学习】016 MySQL数据库优化
    【学习】 015 Linux相关
    【学习】014 深入理解Http协议
    【学习】013 Servlet、Cookie、Session的简述
    js 异常判断
    CSS 文字概念小记
    Echarts tooltip 坐标值修改
    js 查找当前元素/this
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6869495.html
Copyright © 2011-2022 走看看