• 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 


  • 相关阅读:
    zabbix--完整安装攻略
    python--8大排序(原理+代码)
    python--二分法查找
    celery生产者-消费者
    python--基础知识点梳理(之数据结构)
    mysql--事务详解
    python--基础知识点梳理(三)深浅拷贝、进线协程、os和sys、垃圾回收机制、读文件的三种方式
    python--基础知识点梳理(二)面向对象
    python--基础知识点梳理(一)数据类型、迭代生成装饰器、函数
    java 集合
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6869495.html
Copyright © 2020-2023  润新知