0

我有一张桌子:

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

我想要做的是使用更新,以便将具有最低有效 dt 的记录的 inactivedt 更改为每个产品 id 的下一个最低有效 dt 的记录的有效 dt - 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

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

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

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

于 2012-07-28T18:28:21.773 回答