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语法都不一致,写一点东西查半天资料,耽误时间.

  • 相关阅读:
    5.7
    人月神话阅读笔记1
    python汉诺塔问题的递归理解
    用python进行有进度条的圆周率计算
    使用Python+turtle绘制同心圆
    less.modifyVars方法切换主题样例
    npm简单插件开发流程
    Mac中执行yarn global add @vue/cli 成功后,执行vue --version 提示zsh: command not found: vue 解决方法
    执行yarn deploy打包,报内存溢出的错误解决办法
    为首屏增加加载动画
  • 原文地址:https://www.cnblogs.com/sskset/p/3644710.html
Copyright © 2011-2022 走看看