林具有这些表分贝的存储过程:试图写有开始时间和结束时间
drop table if exists events1;
create table if not exists events1(
time_stamp decimal(16,6),
message char(90) not null default 'defult message'
);
drop table if exists events2;
create table if not exists events2(
time_stamp decimal(16,6),
message char(90) not null default 'defult message'
);
drop table if exists events3;
create table if not exists events3(
time_stamp decimal(16,6),
message char(90) not null default 'defult message'
);
insert into events1 (time_stamp,message) values (1485193300,"a1");
insert into events1 (time_stamp,message) values (1485193600,"b1");
insert into events1 (time_stamp,message) values (1485193900,"c1");
insert into events2 (time_stamp,message) values (1485193300,"a1");
insert into events2 (time_stamp,message) values (1485193600,"b2");
insert into events2 (time_stamp,message) values (1485193900,"c3");
insert into events3 (time_stamp,message) values (1485193300,"a1");
insert into events3 (time_stamp,message) values (1485193600,"b2");
insert into events3 (time_stamp,message) values (1485193900,"c3");
我试图建立一个存储过程,有3个参数:
start_time (int) (in epoch)
end_time (int) (in epoch)
interval (int) (in epoch)
我不希望这个程序会迭代start_time,步骤为区间直到end_time,并在每次迭代时,根据步骤和时间间隔获得三个表的并集。
类似:
DELIMITER //
CREATE PROCEDURE get_events
(IN start_time INT,
IN end_time INT,
IN interval INT,
)
BEGIN
while [ start_time <= end_time]
do
next_time = start_time + interval
select *
from events1
where start_time <= time_stamp and time_stamp <= next_time
union
select *
from events2
where start_time <= time_stamp and time_stamp <= next_time
union
select *
from events3
where start_time <= time_stamp and time_stamp <= next_time
start_time = start_time + interval
end while
END //
DELIMITER ;
我知道我有语法错误,我不知道我怎样才能返回结果,并在WHERE情况下给定的时间间隔遍历3代表的联合。
请指教。
你所说的“返回结果”是什么意思? 'UNION'将为WHILE每次迭代返回一个结果集。 –