0

各レコードに、、、および列があるテーブルがValueありVersionEffectiveますVersionExpiration。現在、VersionEffective列は正しく入力されていますが、VersionExpiration列はデフォルトで に設定されてい'9999-12-31'ます。同じ値を持つレコードの場合、最新のレコードのみをVersionEffective期限切れにしないでください。残りはそうあるべきです。具体的には、新しいレコードが挿入されたときに、以前に同じ値を持つアクティブなレコードがあった場合、そのレコードはVersionExpiration新しいレコードの と同等のもので期限切れになりますVersionEffectiveVersionEffective挿入された/を正しく設定するためのストアド プロシージャがありますが、古いレコード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 に答える