この質問のために代表的なサンプルデータが追加された、次のスキーマがあります。
Oracle 11g R2 スキーマのセットアップ:
create table foo(id integer, att1 varchar(9), att2 varchar(9), from_at date);
insert into foo(id, att1, att2, from_at) values(1, 'J', null, sysdate-5);
insert into foo(id, att1, att2, from_at) values(1, null, 'L', sysdate-4);
insert into foo(id, att1, att2, from_at) values(1, 'B', null, sysdate-3);
insert into foo(id, att1, att2, from_at) values(1, 'C', null, sysdate-2);
insert into foo(id, att1, att2, from_at) values(1, null, 'H', sysdate-1);
insert into foo(id, att1, att2, from_at) values(1, 'A', 'H', sysdate);
insert into foo(id, att1, att2, from_at) values(2, null, 'H', sysdate-1);
insert into foo(id, att1, att2, from_at) values(2, 'A', null, sysdate);
| ID | ATT1 | ATT2 | FROM_AT |
----------------------------------------------------------
| 1 | J | (null) | December, 01 2012 15:13:42+0000 |
| 1 | (null) | L | December, 02 2012 15:13:42+0000 |
| 1 | B | (null) | December, 03 2012 15:13:42+0000 |
| 1 | C | (null) | December, 04 2012 15:13:42+0000 |
| 1 | (null) | H | December, 05 2012 15:13:42+0000 |
| 1 | A | H | December, 06 2012 15:13:42+0000 |
| 2 | (null) | H | December, 05 2012 15:13:42+0000 |
| 2 | A | (null) | December, 06 2012 15:13:42+0000 |
各行を表示できるようにしたいのですが、その最新の値をatt1
andに置き換えます。属性は、行が挿入された前回から変更されていない属性を示し、非属性は新しい値を示します。出力は次のようになります。att2
id
null
null
| ID | ATT1 | ATT2 |
------------------------
| 1 | J | (null) |
| 1 | J | L |
| 1 | B | L |
| 1 | C | L |
| 1 | C | H |
| 1 | A | H |
| 2 | (null) | H |
| 2 | A | H |