1

次のコード例を見てください。

with test as (
    select to_date('01/2012', 'mm/yyyy') as dt, '1' as value from dual union all 
    select to_date('02/2012', 'mm/yyyy') as dt, '10' as value from dual union all 
    select to_date('03/2012', 'mm/yyyy') as dt, '100' as value from dual union all 
    select to_date('04/2012', 'mm/yyyy') as dt, '2' as value from dual union all 
    select to_date('05/2012', 'mm/yyyy') as dt, '20' as value from dual 
)
select dt, value from test

戻り値:

DT          | VALUE
1/1/2012    | 1
2/1/2012    | 10
3/1/2012    | 100
4/1/2012    | 2
5/1/2012    | 20

次のように、各レコードの以前の値を含む新しい列を作成できればと思います。

DT          | VALUE  | Previous
1/1/2012    | 1      | -
2/1/2012    | 10     | 1
3/1/2012    | 100    | 10
4/1/2012    | 2      | 100
5/1/2012    | 20     | 2

connect_by ステートメントで常に迷子になりますが、これは十分に単純に思えます。

誰かが助けることができますか?

4

1 に答える 1

1

を使用する必要はありませんCONNECT BY。あなただけが必要ですLAG

SQL> ed
Wrote file afiedt.buf

  1  with test as (
  2      select to_date('01/2012', 'mm/yyyy') as dt, '1' as value from dual union all
  3      select to_date('02/2012', 'mm/yyyy') as dt, '10' as value from dual union all
  4      select to_date('03/2012', 'mm/yyyy') as dt, '100' as value from dual union all
  5      select to_date('04/2012', 'mm/yyyy') as dt, '2' as value from dual union all
  6      select to_date('05/2012', 'mm/yyyy') as dt, '20' as value from dual
  7  )
  8  select dt,
  9         value,
 10         lag(value) over (order by dt) prior_value
 11*   from test
SQL> /

DT        VAL PRI
--------- --- ---
01-JAN-12 1
01-FEB-12 10  1
01-MAR-12 100 10
01-APR-12 2   100
01-MAY-12 20  2
于 2012-09-10T21:24:15.037 に答える