zoukankan      html  css  js  c++  java
  • mysql 存储过程 获取统计结果

    CREATE DEFINER = 'root'@'%' PROCEDURE `proc_GetPatientCondition`(
            
    IN iPatientId INTEGER(11),
            
    IN dStartDate DATE,
            
    IN dEndDate DATE
        )
        
    NOT DETERMINISTIC
        
    CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT 
    ''
    BEGIN
    Declare tempDate date;
    Declare tempDayBegin varchar(9);
    Declare tempNightBegin varchar(9);
    Declare tempDayTimes int;
    Declare tempNightTimes int;
    Declare tempFiledBRate int;
    Declare tempResultLevel int;/* 1,2,3,4 ,when 0 means no result */
    Declare tempResultByFlag int/* 1-by day times per week , 2- by night times per month , 3- by FiledBrate */
    Declare tempIsFinish int;
    Declare vSQL varchar(2000);
    Declare stmt varchar(2100);
    Declare tempStartDateWeekday int;
    Declare tempWeekIndex int ;

    set tempDayTimes = 0;
    set tempNightTimes = 0;
    set tempFiledBRate = 0;
    set tempResultLevel = 0;
    set tempResultByFlag = 0;
    set tempIsFinish = 0;

    /* get the day time begin */
    select concat(' ',ifnull(ParaValue,'07:00'),':00'into tempDayBegin from DBparameter
            
    where ParaKey='DayTime';

    select concat(' ',ifnull(ParaValue,'20:00'),':00'into tempNightBegin from DBparameter
            
    where ParaKey='NightTime';

    /* define temp table to contains all report dates  */
    Drop TEMPORARY TABLE if exists temp_tb_dates;
    Create TEMPORARY TABLE temp_tb_dates
    (reportDate date
    ,theWeek 
    varchar(7)
    ,theMonth 
    varchar(7
    );

    Drop TEMPORARY TABLE if exists temp_tb_diarySumm;
    Create TEMPORARY TABLE temp_tb_diarySumm
    (reportDate date
    ,theWeek 
    varchar(7)
    ,theMonth 
    varchar(7
    ,dayTimes 
    int
    ,nightTimes 
    int
    ,FiledBRate 
    int
    );

    set tempDate = dStartDate;
    set tempStartDateWeekday = WEEKDAY(dStartDate); /* 0-Monday */
    set tempWeekIndex = 1;
    while tempDate <= dEndDate do

        
    insert into temp_tb_dates(reportDate,theWeek,theMonth)
        VALUE(tempDate, tempWeekIndex ,date_format(tempDate,
    '%Y-%m') );
        
        
    if tempStartDateWeekday = 6 then
            
    set tempStartDateWeekday = 0;
            
    set tempWeekIndex = tempWeekIndex + 1;
        
    else
            
    set tempStartDateWeekday = tempStartDateWeekday + 1;
        
    end if;
        
        
    set tempDate = date_add(tempDate, interval 1 day);
    end while;

    set vSQL = ' ';
    set vSQL=CONCAT(vSQL,' insert into temp_tb_diarySumm');
    set vSQL=CONCAT(vSQL,' select * from  ');
    set vSQL=CONCAT(vSQL,' ( ');

    set vSQL=CONCAT(vSQL,' select t0.reportDate ,theWeek , theMonth ');
    set vSQL=CONCAT(vSQL,' , ifnull(dayTimes,0) as dayTimes  ');
    set vSQL=CONCAT(vSQL,' , ifnull(FiledBRate,0) as FiledBRate ');
    set vSQL=CONCAT(vSQL,' from  ');
    set vSQL=CONCAT(vSQL,' ( ');
    set vSQL=CONCAT(vSQL,' select reportDate ,theWeek , theMonth ');
    set vSQL=CONCAT(vSQL,' from temp_tb_dates ');
    set vSQL=CONCAT(vSQL,' ) t0 ');
    set vSQL=CONCAT(vSQL,' left join ');
    set vSQL=CONCAT(vSQL,' ( ');
    set vSQL=CONCAT(vSQL,' select count(recordid) as dayTimes  ');
    set vSQL=CONCAT(vSQL,'  ,date_format(FiledATime,''%Y-%m-%d'') as reportDate ');
    set vSQL=CONCAT(vSQL,' from DBdiaryFiledA ');
    set vSQL=CONCAT(vSQL,' where patientid=', iPatientId);
    set vSQL=CONCAT(vSQL,'  and FiledATime >=','''concat(date_format(FiledATime,''%Y-%m-%d''),''',tempDayBegin,''')');
    set vSQL=CONCAT(vSQL,'  and FiledATime < ','''concat(date_format(FiledATime,''%Y-%m-%d''),''',tempNightBegin ,''')');
    set vSQL=CONCAT(vSQL,' group by reportDate  ) t1 ');
    set vSQL=CONCAT(vSQL,' on t1.reportDate = t0.reportDate ');
    set vSQL=CONCAT(vSQL,' left join ');
    set vSQL=CONCAT(vSQL,' ( ');
    set vSQL=CONCAT(vSQL,' select ((ifnull(max(FiledB),1) - ifnull(min(FiledB),1)) * 200 ) /( ifnull(max(FiledB),1) + ifnull(min(FiledB),1) ) as FiledBRate ');
    set vSQL=CONCAT(vSQL,' ,date_format(gathertime,''%Y-%m-%d'')  as reportDate ');
    set vSQL=CONCAT(vSQL,' from DBdiaryFiledBb ');
    set vSQL=CONCAT(vSQL,' where patientid=', iPatientId);
    set vSQL=CONCAT(vSQL,' and FAvailFlag > 0 ');
    set vSQL=CONCAT(vSQL,'  and gathertime >= ','','concat(date_format(gathertime,''%Y-%m-%d''),''',' 00:00:00',''')');
    set vSQL=CONCAT(vSQL,'  and gathertime < ','','concat(date_format(date_add(gathertime, interval 1 day),''%Y-%m-%d''),''',' 00:00:00',''')');
    set vSQL=CONCAT(vSQL,' group by reportDate ) t3  ');
    set vSQL=CONCAT(vSQL,' on t3.reportDate = t0.reportDate ');

    set vSQL=CONCAT(vSQL,' ) t ');

    set @sqltext:=vSQL;
    prepare stmt from @sqltext;
    execute stmt;



    select MAX(dayTimesWeek) into tempDayTimes 
    from
    (
    select sum(dayTimes) as dayTimesWeek  
    from temp_tb_diarySumm
    group by theWeek 
    ) tDay;

    select MAX(nightTimesMonth) into tempNightTimes 
    from
    (
    select sum(nightTimes) as nightTimesMonth 
    from temp_tb_diarySumm
    group by theMonth
    ) tNight;

    select max(FiledBRate) into tempFiledBRate  
    from temp_tb_diarySumm;

    if tempIsFinish=0 and tempFiledBRate > 30 THEN
       
    set tempIsFinish = 1;   
       
    set tempResultByFlag =3;
       
    set tempResultLevel = 3;
    end if;

    if tempIsFinish=0 and tempFiledBRate <= 30 and tempFiledBRate >= 20 THEN
       
    set tempIsFinish = 1;   
       
    set tempResultByFlag =3;
       
    set tempResultLevel = 2;
    end if;

    if tempIsFinish=0 and tempFiledBRate < 20 and tempFiledBRate > 0 THEN
       
    set tempIsFinish = 1;   
       
    set tempResultByFlag =3;
       
    set tempResultLevel = 1;
    end if;


    select tempResultLevel , tempResultByFlag , tempDayTimes, tempNightTimes ,tempFiledBRate;

       
    Drop TEMPORARY TABLE if exists temp_tb_dates;
    Drop TEMPORARY TABLE if exists temp_tb_diarySumm;

    END;
  • 相关阅读:
    JavaScript:事件
    JavaScript系统对象
    DOM基础:table(表格)
    DOM基础
    Cookie的简单实用
    javascript:变量的作用域
    javascript:没有定义的变量和没有定义的属性
    数组的基本使用
    静态代码块、代码块、构造函数、匿名内部类、匿名内部类中的代码块
    java使用指定的国际化文件
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2096101.html
Copyright © 2011-2022 走看看