网站建设公司成都,佛山规划建设局网站,tornado 网站开发,上海分类信息网指定したソートキーでの、最初の行の値を求めるのが、First_Value関数。指定したソートキーでの、最後の行の値を求めるのが、Last_Value関数。指定したソートキーでの、(Row_Numberな順位が)n番目の行の値を求めるのが、nth_Value関数となります。Oracle11gR2でnth_Value関数が…指定したソートキーでの、最初の行の値を求めるのが、First_Value関数。指定したソートキーでの、最後の行の値を求めるのが、Last_Value関数。指定したソートキーでの、(Row_Numberな順位が)n番目の行の値を求めるのが、nth_Value関数となります。Oracle11gR2でnth_Value関数が追加されました。create table FirstLastSample(ID,SortKey,Val) asselect 111,1,20 from dual union allselect 111,3,60 from dual union allselect 111,9,40 from dual union allselect 222,2,90 from dual union allselect 222,4,70 from dual union allselect 333,5,80 from dual;IDごとでSortKeyの昇順で、最初の行のValと最後の行のValを求めてみます。select ID,SortKey,First_Value(Val)over(partition by ID order by SortKey) as FirVal,Val,Last_Value(Val)over(partition by ID order by SortKeyRows between Unbounded Precedingand Unbounded Following) as LastValfrom FirstLastSample;出力結果ID SortKey FirVal Val LastVal--- ------- ------ --- -------111 1 20 20 40111 3 20 60 40111 9 20 40 40222 2 90 90 70222 4 90 70 70333 5 80 80 80SQLのイメージは下記です。partition by IDで、IDごとに区切る赤線を引いて、First_Value関数で青線、Last_Value関数で黄緑線を引いてます。First_ValueとLast_Valueのignore nullsある条件を満たす、最初や最後の行の値を求めるOracle10gR1から、First_Value関数とLast_Value関数で、ignore nullsを指定できます。Oracle11gR2からは、Lag関数とLead関数でもignore nullsを指定できます。Last_Value(値 ignore nulls) over句 が基本的な使い方ですが、Last_Value(case when 条件 then 値 end ignore nulls) over句 というふうに、case式を組み合わせて使うほうが多いです。create table IgnoreNullsSample1(ID,SortKey,Val) asselect 555,1, 600 from dual union allselect 555,3, 300 from dual union allselect 555,5,null from dual union allselect 555,9,null from dual union allselect 666,2, 400 from dual union allselect 666,3,null from dual union allselect 666,4,null from dual union allselect 666,5, 600 from dual union allselect 777,1,null from dual union allselect 777,3,null from dual union allselect 777,5, 900 from dual union allselect 777,6,null from dual;IDごとでSortKeyの昇順で、最初のnullでないValと、最後のnullでないValを求めてみます。select ID,SortKey,First_Value(Val ignore nulls)over(partition by ID order by SortKeyRows between Unbounded Precedingand Unbounded Following) as FirVal,Val,Last_Value(Val ignore nulls)over(partition by ID order by SortKeyRows between Unbounded Precedingand Unbounded Following) as LastValfrom IgnoreNullsSample1;出力結果ID SortKey FirVal Val LastVal--- ------- ------ ---- -------555 1 600 600 300555 3 600 300 300555 5 600 null 300555 9 600 null 300666 2 400 400 600666 3 400 null 600666 4 400 null 600666 5 400 600 600777 1 900 null 900777 3 900 null 900777 5 900 900 900777 6 900 null 900SQLのイメージは下記です。partition by IDで、IDごとに区切る赤線を引いて、First_Value関数で青線、Last_Value関数で黄緑線を引いてます。ignore nullsの、別の使い方として、その行以降で最初のnullでないValや、その行までで最後のnullでないValを求めるといった使い方もあります。create table IgnoreNullsSample2(SortKey,Val) asselect 1,null from dual union allselect 2, 500 from dual union allselect 3,null from dual union allselect 5,null from dual union allselect 6, 300 from dual union allselect 10,null from dual union allselect 11,null from dual union allselect 12, 700 from dual union allselect 13,null from dual;select SortKey,First_Value(Val ignore nulls)over(order by SortKeyRows between current rowand Unbounded Following) as FirVal,Val,Last_Value(Val ignore nulls)over(order by SortKey) as LastValfrom IgnoreNullsSample2;出力結果SortKey FirVal Val LastVal------- ------ ---- -------1 500 null null2 500 500 5003 300 null 5005 300 null 5006 300 300 30010 700 null 30011 700 null 30012 700 700 70013 null null 700SQLのイメージは下記です。First_Value関数で青線、Last_Value関数で黄緑線を引いてます。Rows 2 Preceding移動累計を求める (行数を指定)Rows 2 Precedingといった指定は、移動平均や移動累計を求める時などに使われます。create table MoveSumSample(SortKey,Val) asselect 1, 10 from dual union allselect 2, 20 from dual union allselect 5, 60 from dual union allselect 7,100 from dual union allselect 8,200 from dual union allselect 9,600 from dual;SortKeyの昇順での、前の2行と自分の行を加算対象とした移動累計を求めてみます。select SortKey,Val,sum(Val) over(order by SortKey Rows 2 Preceding) as moveSumfrom MoveSumSample;出力結果SortKey Val moveSum------- --- -------1 10 102 20 305 60 907 100 1808 200 3609 600 900SQLのイメージは下記です。sum(Val) over(order by SortKey Rows 2 Preceding)で黄緑線を引いてます。Range 2 Preceding移動累計を求める (ソートキーの範囲を指定)Range 2 Precedingといった指定は、移動平均や移動累計を求める時などに、使われます。Rows 2 Precedingとの違いは、Rowsが行数の指定なのに対して、Rangeはソートキーの範囲の指定という点です。SortKeyが自分の行より2小さい行から、自分の行までを加算対象とした移動累計を求めてみます。select SortKey,Val,sum(Val) over(order by SortKey Range 2 Preceding) as moveSum2from MoveSumSample;出力結果SortKey Val moveSum2------- --- --------1 10 102 20 305 60 607 100 1608 200 3009 600 900SQLのイメージは下記です。sum(Val) over(order by SortKey Range 2 Preceding)で黄緑線を引いてます。