使用Oracle中前一行的值更新当前行

时间:2016-03-29 09:33:11

标签: oracle oracle11g

我有一个名为batch_history的表,其中包含以下数据。该表包含不同批次的数据(批次ID将有所不同)。我想将current_status_start_date更新为上一行的rec_change_date。我希望这仅针对current_status_id为3310和3320的记录进行更新。这应该在batch_history表中以data_stream_id为129的所有批次(在屏幕截图中显示一个批次的数据)中完成。

batch_history表中的当前数据:

enter image description here

batch_history表中需要的输出:

enter image description here

我使用了' WITH'条款,但我仍然无法弄清楚这个问题的确切用法和解决方案。请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

UPDATE batch_history t  
SET t.current_status_start_date = NVL((SELECT max(s.rec_change_date) FROM batch_history s
                                       WHERE s.rec_change_date < t.rec_change_date 
                                         and t.batch_id = s.batch_id),
                                      current_status_start_date )