2017-12-13 7 views
0

私は更新前に次のようなデータを持っています。私は "更新後"イメージのような最終結果を得ようとしています。強調表示されたセルの末尾の日付列を入力してください。SQLは以前のレコードの値を使用します

1 - 前の各行の終了日列に次の行の開始日を入力する必要があります。私は遅れとリードの機能を持たないSQL Server 2008を使用しています。

2 - また

CarryoverFrom = the ID of the previous not immediate PREMIUM row 
CarryoverFrom2 = the ID of the immediate previous PREMIUM row 
CarryoverAppliedTo = Sum of the Carryover amount of the previous PREMIUM rows 

を次のように現在のGOLD行を入力する必要があります**注のみGOLD行の後に起きた前回のプレミアム行の各GOLD行ディールいます。のみPREMIUM行ID 4なく、ID 2でPREMIUM行および2

--BEFORE UPDATE enter image description here

--after UPDATE enter image description here

+0

'LAG、LEAD'がなければ、自己結合がオプションの1つです。あなたはそれを試しましたか? –

答えて

0

有する例示ID 5行割引のためのLAGまたはLEADがなければ、行番号でテーブルを自己結合することができます。アイテム1の場合、

UPDATE A SET [End Date] = NextRecords.[Start Date] FROM 
(SELECT *, ROW_NUMBER() OVER (ORDER BY [Start Date]) rownum FROM [table]) A 
INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY [Start Date]) rownum FROM [table]) NextRecords 
ON A.rownum + 1 = NextRecords.rownum 

アイテム2は同様ですが、もう少し精巧になります。