0

私はテーブルを持っています:

CREATE TABLE ProductPrice
(
ProductId       INT             NOT NULL,
EffectiveDt     DATE            NOT NULL,
InactiveDt      DATE            NOT NULL,
Price           DECIMAL(10,2)   NOT NULL
)

私がやりたいことは、更新を使用して、最も低い effectivedt を持つレコードの inactivedt が、各製品 ID の次に低い effectivedt を持つレコードの effectivedt - 1 に変更されるようにすることです。

だから私たちが持っているとしましょう:

21/07/2012  26/07/2012
24/07/2012  28/07/2012
27/07/2012  30/07/2012

これは次のように変更されます。

21/07/2012  23/07/2012
24/07/2012  26/07/2012
27/07/2012  30/07/2012

これまでのところ、私は持っています:

UPDATE pp 
SET    pp.InactiveDt = (SELECT pe.EffectiveDt
               FROM   ProductPrice pe 
               WHERE  pe.ProductId = pp.ProductId
               ) 
FROM   ProductPrice pp; 

しかし、これは私が必要とすることを実際には行いません。

4

1 に答える 1

0

1 つの大きな更新クエリでそれを実行できるとは思いません。できたとしても、コードがめちゃくちゃになるでしょう。

これを行う正しい方法は、for および while ループを使用してスクリプトを記述できるようにする MySQL ストアド プロシージャを使用することであり、単純な選択でいつでも呼び出すことができます。

http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

于 2012-07-28T18:28:21.773 に答える