2017-01-23 34 views
0

林具有这些表分贝的存储过程:试图写有开始时间和结束时间

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代表的联合。

请指教。

+0

你所说的“返回结果”是什么意思? 'UNION'将为WHILE每次迭代返回一个结果集。 –

回答

0

什么是语法错误?

[是无效的语法;或许(WHILE

a = a + b是无效的语法;请参阅SET命令。

具有相同模式的3个表格是通常是一个糟糕的设计。

使用CHAR而不是VARCHAR我们通常是一个坏主意。

+0

我写了架构只是为了说明。我被困在存储过程中。我把它们写成伪代码的时候,我不知道如何保存每个迭代的查询结果,以及如何返回所有结果。 –

0
INSERT INTO "table name" 
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 

这会将查询存储在一个表中,然后您可以遍历该表。不知道这是你要求的。

下面是文档: https://dev.mysql.com/doc/refman/5.7/en/insert-select.html

相关问题