-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

第一行的差异是根据 计算的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 的价值,next row其中ascending order of pdat. 然后nvl function关心在last date哪里no next date- 它使用last_day(pdat)函数调用返回一个月的最后一天 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 回答