zoukankan      html  css  js  c++  java
  • MySQL 存储过程,游标,临时表创建

    -- --------------------------------------------------------------------------------
    -- Routine DDL
    -- Note: comments before and after the routine body will not be stored by the server
    -- --------------------------------------------------------------------------------
    DELIMITER $$
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `filter_record_time`(startTime timestamp, endTime timestamp, pointIndex int)
    BEGIN  
            declare _recordtime timestamp;
            declare _pointIndex smallint;
            declare _value double;
            declare _result text;
            declare _previoustime timestamp;
            DECLARE done INT DEFAULT FALSE;
            
    
            declare fetchSeqCursor cursor for select distinct RecordTime,PointIndex,Value
                                                from flow_record 
                                               where recordtime >= startTime 
                                                 and recordtime < endTime
                                                 and pointIndex = pointIndex 
                                                 and recordtime is not null
                                            order by recordtime;
            
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
            create table if not exists filter_record_time_temp(timeFrom timestamp, timeTo timestamp, times int);
        
            open fetchSeqCursor;
            
            
            seq_loop:loop
                fetch fetchSeqCursor into _recordtime, _pointIndex, _value;
    
                IF done THEN
                    LEAVE seq_loop;
                END IF;
    
                if _previoustime is null then
                    if _recordtime <> startTime then
                        insert into filter_record_time_temp select startTime timefrom, _recordtime timeto, 
                                cast((unix_timestamp(_recordtime) - unix_timestamp(startTime) - 120) / 120 as signed)  times;
                    end if;
                else 
                    if unix_timestamp(_previoustime) + 120 < unix_timestamp(_recordtime) then
                        insert into filter_record_time_temp select _previoustime timefrom, _recordtime timeto,
                                cast((unix_timestamp(_recordtime) - unix_timestamp(_previoustime) - 120) / 120 as signed) times;
                    end if;
                end if;
    
                set _previoustime = _recordtime;
            end loop;
    
            close fetchSeqCursor; 
    
            if unix_timestamp(_previoustime) + 120 < unix_timestamp(endTime) then
                insert into filter_record_time_temp select _previoustime timefrom, endTime timeto,
                                cast((unix_timestamp(endTime) - unix_timestamp(_previoustime) - 120) / 120 as signed) times;
            end if;
    
            select * from filter_record_time_temp;
    
            drop table if exists filter_record_time_temp;
    
    END

    真尼玛烦人,各个数据库sql语法都不一致,写一点东西查半天资料,耽误时间.

  • 相关阅读:
    Session问题-一个部门A登录后未注销另一个部门B再登录,以B的身份操作A的成员
    Windows Server2008安装mysql5.6出现程序无法正常启动(0xc000007b)
    百度定位SDK
    Dubbo项目一段时间后提供者消失
    百度安卓SDK秘钥Key错误
    XGBoost类库使用小结
    支持向量机原理(五)线性支持回归
    主成分分析(PCA)原理总结
    scikit-learn 和pandas 基于windows单机机器学习环境的搭建
    梯度提升树(GBDT)原理小结
  • 原文地址:https://www.cnblogs.com/sskset/p/3644710.html
Copyright © 2011-2022 走看看