2016-08-06 2 views
5

前の行の値を使用する際に問題があります(やり方は分かりません)。私はのような何かをしたい前の行の値を使用しています。

:私は主キーIDを持っ

update test SET amount = (select amountAfter 
from rozl (Here i want to take it from previous row = this ID - 1) 

、テーブル全体がidでソートされます。 私がしたいことは次のとおりです。

列名amountAfterの前の行から値を取り、実際のIDの金額に挿入します。ここで

はここにあなたのidフィールドが連続していると仮定しjoin使用して一つの選択肢だ例

id amount used destroyed amountAfter 
    1  100  50   30   20 
    2  20  5   1   14 
+1

ウィンドウ関数 'LAG'をチェックアウト: https://msdn.microsoft.com/en-us/library/hh231256.aspx – Nicarus

答えて

3

です:

update t1 
set t1.amount = t2.amountafter 
from test t1 join 
    test t2 on t2.id = t1.id - 1 

あなたが2012以上を使用している場合は、lagを使用して見てください:

with cte as (
    select id, amount, lag(amount) over (order by id) prevamount 
    from test 
    ) 
update cte 
set amount = prevamount 
where prevamount is not null 

そして、私は完全であると推測番号が連続していないしている場合、2008は(両方のアプローチの組み合わせを使用して)row_numberで動作します:

with cte as (
    select id, amount, row_number() over (order by id) rn 
    from test 
    ) 
update t1 
set t1.amount = t2.amount 
from cte t1 join 
    cte t2 on t2.rn = t1.rn - 1 
+0

おそらく、これは逐次的なIDに依存していることに気付くでしょう(なし) – Nicarus

+0

@Nicarus - 良い点。編集しました、おそらく私はこれを文字通り取っていました: 'ここで私は前の行= this ID - 1'からそれを取りたいと思っています – sgeddes

+0

@sgeddesあなたに私に連絡をくれませんでしたか?私はちょうどもう1つの質問がありました。おそらく答えがもっと簡単になるので、何の理由もなく新しいスレッドを開始したくありません。 – JustSomeNewbie

関連する問題