将InactiveDt更改为与产品ID中的下一个最低EffectiveDt相同的日期

时间:2012-07-28 12:48:18

标签: mysql date compare-and-swap

我有一张桌子:

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

我想要做的是使用更新,以便将具有最低有效值的记录的inactivedt更改为有效值 - 记录的1,每个产品ID的下一个最低有效值。

所以说我们有:

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; 

但这并不是我真正需要的。

1 个答案:

答案 0 :(得分:0)

我不认为你可以在一个大的更新查询中做到这一点,即使你可以,它也会是一堆代码。

正确的方法是使用MySQL存储过程,允许您使用for和while循环编写脚本,并且可以随时通过简单的选择对其进行调用。

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