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

  • 相关阅读:
    PDO 数据访问抽象层
    注册审核、批量删除
    分页查询
    会话用法
    封装成类
    多条件查询(复选框条件)
    IP子网划分
    redhat 用yum安装的apache、mysql一般默认安装在哪个目录下?
    nslookup
    linux 设置时间
  • 原文地址:https://www.cnblogs.com/sskset/p/3644710.html
Copyright © 2011-2022 走看看