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
答案 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}}