我想创建一个插入具有某些条件的行的过程。我是这个领域的新手,请任何人帮我这样做。
我的表结构是。
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
任何人帮助我这样做。
答案 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'。