-1
select pdat
      ,ac_no
      , bal
 from dummy_table;

PDATE     | AC_NO | BAL  
========================    
14/02/2012| abcd  | 1200    
15/02/2012| abcd  | 1300
27/02/2012| abcd  | 1300

私の質問は、どうすればresult set to fetch

PDATE     | AC_NO | BAL  | Difference
=====================================
14/02/2012| abcd  | 1200 |    8
22/02/2012| abcd  | 1300 |    7

行1の差は、に基づいて計算されます22/02/2012-14/02/2012。しかし、最終日の差とその月の終了日との差を計算するにはどうすればよいですか?この場合29th Feb 2012

4

1 に答える 1

3

ここで重要なのはLEAD function- に関するドキュメントを読んでくださいanalytical functions in SQL。これらは非常に強力なツールです。に入るLEAD(pdat) OVER (ORDER BY pdat)pdat の値を取得します。次に、ある場所に注意します-pdatが該当する月の最後の日を返す関数呼び出しを使用します.next rowascending order of pdatnvl functionlast dateno next datelast_day(pdat)

DECODE function数か月を処理する場合は、 pdat とLEAD(pdat) OVER (ORDER BY pdat)が同じ月に属しているかどうかを検出し、LEAD(pdat) OVER (ORDER BY pdat)比較対象の日付としてまたは last_day(pdat)を使用するために分析を行う必要があります。宿題として残します。

 create table dummy_table(pdat date, ac_no varchar2(10), bal number);

 insert into dummy_table values ('14-FEB-2012', 'abcd', 1200);
 insert into dummy_table values ('15-FEB-2012', 'abcd', 1300);
 insert into dummy_table values ('27-FEB-2012', 'abcd', 1300);

 select pdat
     , ac_no
     , bal
     , nvl(lead(pdat) over (order by pdat) - pdat, last_day(pdat) - pdat) 
  from dummy_table;

 2/14/2012 abcd 1200  1
 2/15/2012 abcd 1300 12
 2/27/2012 abcd 1300  2
于 2012-10-08T12:23:17.617 に答える