0

条件付きで行を挿入する手続きを作りたいです。この分野は初めてです。どなたか助けてください。

私のテーブル構造は.

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

誰でも私がこれを行うのを手伝ってください。

4

1 に答える 1

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 が現在の日付以降のエントリをチェックすることを目的としています。見つかった場合は、そのエントリを「クローズ」に更新し、今月の最初と最後の日付とステータス =「オープン」で新しいエントリを作成します。

于 2013-01-20T12:23:46.293 に答える