Oracle SQL与月末的日期差异

时间:2012-10-08 11:47:59

标签: sql oracle

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

1 个答案:

答案 0 :(得分:3)

此处的关键是LEAD function - 阅读有关analytical functions in SQL的文档,它们是非常强大的工具。 LEAD(pdat) OVER (ORDER BY pdat)可以next row ascending order of pdat中的nvl function获得pdat的价值。然后last date会关注no next date last_day(pdat) - 它使用DECODE function函数调用返回pdat所属的一个月的最后一天。

如果您想处理几个月 - 您需要使用LEAD(pdat) OVER (ORDER BY pdat)进行一些分析,以检测pdat和LEAD(pdat) OVER (ORDER BY 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 或last_day(pdat)作为您比较的日期。我会留下它作为你的作业。

{{1}}