2017-02-08 6 views
0

"FirstPayment"というフィールドを同じテーブルの別のフィールドの日付で更新する必要があります。ここで同じテーブル内の別の列の最小日付から日付の列を更新

コードです:

UPDATE R1 
SET R1.FirstPayment = (select min(r1.effective_date) where R1.amount>0) 
from CTTC_RentalCarPayments R1, CTTC_RentalCarPayments R2 
where r1.id=r2.id 

これは私がここに簡単な何かが欠けています知っている

を「集合体はUPDATE文のセットリストに表示されないこと」になります。

FirstPaymentフィールドは必要ではないこともわかっています。クエリでその日付を取得できるため、このデータを入力するアプリケーションにもこの列に必要です。

+0

中かっことテーブルのエイリアスについては確かですか? 'UPDATE'ステートメントは' FROM'部分を含んでいません... –

答えて

1

使用ウィンドウ機能:

with toupdate as (
     select r.*, 
      min(case when r1.amount > 0 then r.effective_date end) over (partition by id) as new_effective_date 
     from CTTC_RentalCarPayments r 
    ) 
update toupdate 
    set FirstPayment = new_effective_date; 
0

あなたが変数に取得したいフィールドの値を設定し、その変数にフィールドを更新できます。

Declare @firstPayment datetime; 
Set @firstPayment = (select min(r1.effective_date) from r1 where R1.amount>0); 
Declare @firstPaymentID int; 
Set @firstPaymentID = (select id from r1 where @firstPayment = FirstPayment); 

UPDATE r1 
SET FirstPayment = @firstPayment where Id = @firstPaymentID; 

が、この場合、私に教えてください助けてください。これは再帰的なCTEではありませんが、動作する可能性もあります。

関連する問題