0

我有一个表,其中每条记录都有一个Value,一个VersionEffective和一个VersionExpiration列。目前,该VersionEffective列已正确填写,但该VersionExpiration列默认为'9999-12-31'. 对于具有相同值的记录,只有最新的记录VersionEffective不应该过期。其余的应该是。具体来说,当插入新记录时,如果之前有一条具有相同值的活动记录,则该记录将过期,其VersionExpiration等效于新记录的VersionEffective. VersionEffective我有一个存储过程可以在插入/时正确设置VersionExpiration它们,但我需要返回并追溯更新VersionExpiration旧记录的字段。

我目前的想法类似于以下内容:

  UPDATE fubarTable as t
     SET t.VersionExpiration = ( 
               SELECT TOP 1 VersionEffective
                 FROM fubarTable as f
                WHERE t.Value = f.Value
             ORDER BY VersionEffective DESC
         )
       ;

但是,这行不通。有任何想法吗?

4

1 回答 1

0

我认为这应该为您当前的设置做到这一点:

UPDATE t
 SET t.VersionExpiration = ( 
       SELECT TOP 1 VersionEffective
         FROM fubarTable as f
        WHERE t.Value = f.Value and f.VersionEffective > t.VersionEffective
     ORDER BY VersionEffective
 )

 FROM fubarTable t
 where t.VersionEffective <> ( Select MAX(VersionEffective) from fubarTable where Value = t.Value)
于 2013-04-23T19:25:02.220 回答