トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-10 null以外の、以前の値を取得

SQLパズル

テーブルT
Col1  Col2
----  ----
   A  1111
   B  null
   C  null
   D  null
   E  null
   F  3333
   G  null
   H  null
   I  2222

テーブルTから、以下の出力を行う。

出力結果
Col1  Col2  Col3
----  ----  ----
   A  1111  1111
   B  null  1111
   C  null  1111
   D  null  1111
   E  null  1111
   F  3333  3333
   G  null  3333
   H  null  3333
   I  2222  2222

こちらを参考にさせていただきました(英語)


データ作成スクリプト

create table テーブルT(
Col1 char(1),
Col2 number(4));

insert into テーブルT values('A',1111);
insert into テーブルT values('B',null);
insert into テーブルT values('C',null);
insert into テーブルT values('D',null);
insert into テーブルT values('E',null);
insert into テーブルT values('F',3333);
insert into テーブルT values('G',null);
insert into テーブルT values('H',null);
insert into テーブルT values('I',2222);
commit;


SQL

--■■■Last_Value関数とignore nullsを使う方法(10g以降)■■■
select Col1,Col2,
Last_Value(col2 ignore nulls) over(order by col1) as Col3
from テーブルT;

--■■■相関サブクエリを使う方法■■■
select Col1,Col2,
(select b.Col2 from テーブルT b
  where b.Col1 = (select max(c.Col1) from テーブルT c
                   where c.Col1 <= a.Col1
                     and c.Col2 is not null)) as Col3
from テーブルT a;


解説

Last_Value関数でignore nullsを指定すると、
nullを対象外とすることができます。