数据表:
编号 数量 日期
5 100 2015/11/01
5 100 2015/11/07
5 100 2015/11/10
6 100 2015/11/01
6 100 2015/11/05
6 -50 2015/11/10
需要结果
编号 数量 开始日期 结束日期
5 100 2015/11/01 2015/11/06
5 200 2015/11/07 2015/11/09
5 300 2015/11/10 2015/11/31
6 100 2015/11/01 2015/11/04
6 200 2015/11/05 2015/11/09
6 150 2015/11/10 2015/11/31
结果的数量 是累加的 结束日期 是下一条数据的日期 减1
------解决思路----------------------
select 编号,
sum(数量)over(partition by 编号 order by 日期) 数量 ,
日期 开始日期,
lead(to_char(to_date(日期,'yyyy/mm/dd')-1,'yyyy/mm/dd'),1,to_char(last_day(to_date(日期,'yyyy/mm/dd')),'yyyy/mm/dd'))over(partition by 编号 order by 日期) 结束日期
from tab;
末尾的结束日期是当月的最后一天,感觉处理麻烦了。
另外,11月是小月,没有31
------解决思路----------------------
1楼的思路就可以~
------解决思路----------------------
--建表
create table cux_test20151116(
id varchar2(10),
num number,
date1 date
);
--插入数据

--解决sql
SELECT cux.id 编号
,SUM(cux.num) over(PARTITION BY cux.id ORDER BY cux.date1) 数量
,cux.date1 开始日期
,lead(cux.date1
,1
,last_day(cux.date1)) over(PARTITION BY cux.id ORDER BY cux.date1) 结束日期
FROM cux_test20151116 cux
