使用上一行中的列更新当前行中的列数据

时间:2018-03-26 12:07:06

标签: sql oracle plsql merge

任何人都可以在下面的执行中帮助我:

我想将date_value 8-JAN-2018的RACF_ID和SUPV_RACF列更新为 date_value 01-JAN-2018的RAC_ID和SUPV_RACF列中的数据。 基本上我想将特定日期值的数据更新为前一周的date_value中存在的数据。(date_value - 7)。它应该只更新列effective_dt为null的行

以下是我尝试但未能输出的查询:

declare
cursor C1 is 

select * from temp_join;
begin
for i in C1
Loop
update temp_join r 
set r.RACF_ID = i.RACF_ID ,
r.SUPV_RACF = i.SUPV_RACF   
where  to_date(r.date_value , 'dd-mon-yyyy') = to_date(i.date_value , 'dd-mon-yyyy') -7 and
to_date(r.date_value , 'dd-mon-yyyy') > to_date('01-JAN-2018' , 'dd-mon-yyyy') and R.Effective_Dt is null ;
end Loop;
end;

我希望实现的输出与该表的当前场景:

DESIRED OUTPUT

表格

CURRENT SCENARIO OF THE TABLE

1 个答案:

答案 0 :(得分:0)

您的信息中没有图片(我想您打算附上这些图片)。无论如何,像这样的SQL可能会起作用:

  • 备注A:您应该在某些内容上加入表格(可能是ID)
  • 备注B:如果DATE_VALUE列数据类型为DATE(应该是),则不需要TO_DATE
update temp_join r
   set (r.racf_id, r.supv_racf) =
          (select i.recf_id, i.supv_racf i
             from temp_join i
            where     i.id = r.id                       --> remark A
                  and r.date_value = i.date_value - 7)  --> remark B
 where     r.date_value > date '2018-01-01'
       and r.effective_dt is null;