用条件在mysql中插入过程

时间:2013-01-20 11:54:59

标签: mysql mysql-workbench

我想创建一个插入具有某些条件的行的过程。我是这个领域的新手,请任何人帮我这样做。

我的表结构是。

Id startDate enddate    transdate   status.
1  1/12/2012 30/12/2012 31/12/2013  CLOSED
2  1/1/2013  30/1/2013  31/1/2013   OPEN

我的查询逻辑就在这里。

此过程每天运行。但过程检查最后一个id = 2的条目并检查交易日期。如果交易日期小于当前日期,则表示将最后一个记录状态更新为CLOSED,并自动插入新记录,并使用下一个记录。

Id startDate enddate    transdate   status.
1  1/12/2012 30/12/2012 31/12/2013  CLOSED
2  1/1/2013  30/1/2013  31/1/2013   CLOSED
2  1/2/2013  27/2/2013  28/2/2013   OPEN

任何人帮助我这样做。

1 个答案:

答案 0 :(得分:1)

这将是这样的:

create procedure updatetable()   
BEGIN
    declare found_id as int;
    select id into found_id from table where transdate >= curdate() and status = 'open';
    if (!is_null( found_id )) THEN
       update table set status = 'closed' where id = found_id;
       insert into table( startdate, enddate, transdate, status ) 
           values concat( year(curdate()), "-01-", month(curdate())), 
                  concat( year(curdate()), "-", LAST_DAY( curdate()), month(curdate())), curdate(),
                  "open" );
    END IF

END

因为我只是猜测语法,所以你需要稍微调试一下。目的是检查transdate等于或等于当前日期的任何条目。如果找到任何条目,则将该条目更新为“已关闭”并创建一个新条目,其中包含本月的第一个和最后一个日期,并且status ='open'。