假设有这样的记录
时间 新增数量
2010-01-01 1
2010-01-02 3
。
。
。
。
2010-02-02 10
。
。
。需要查询出某一时间段内 一天的总量,也就是对这一天之前的所有新增数量求和。比如 查询 2010-01-03 到 2010-02-03 这一个月内每一天的保有量,会有30条记录。怎么写SQL
时间 新增数量
2010-01-01 1
2010-01-02 3
。
。
。
。
2010-02-02 10
。
。
。需要查询出某一时间段内 一天的总量,也就是对这一天之前的所有新增数量求和。比如 查询 2010-01-03 到 2010-02-03 这一个月内每一天的保有量,会有30条记录。怎么写SQL
直接2010-01-03<= 时间 <=2010-02-03不就行了还是要这样的2010-01-01 1
2010-01-02 3
2010-01-03 0
2010-01-04 0
。
2010-02-02 10
with tt as(
select date'2010-01-03' 时间, 1 新增数量 from dual union all
select date'2010-01-04' 时间, 3 新增数量 from dual union all
select date'2010-01-05' 时间, 5 新增数量 from dual union all
select date'2010-01-06' 时间, 8 新增数量 from dual)SELECT tt.*, SUM(新增数量) over(ORDER BY 时间) 累计和
FROM tt
WHERE tt.时间 BETWEEN DATE '2010-01-03' AND DATE '2010-02-03'
,nvl(a.新增数量,0)
from(
select 时间 新增数量
from table
where 2010-01-03<= 时间
and 时间 <=2010-02-03) A,
(
select to_date('2010-01-03')+(rownum-1) 时间
from dual
connect by rownum-1 <= to_date('2010-02-03') - to_date('2010-01-03')
) B
where b.时间 = a.时间(+)
order by b.时间 asc
from(select to_char(t.date,'yyyy-mm-dd') dates,t.num num
from t
where t.date between date_begin and date_end) m
group by m.dates不知道说的是不是这个意思。
Table createdinsert into test_olap(dt,amount) values(sysdate - 30,1);
insert into test_olap(dt,amount) values(sysdate - 29,2);
insert into test_olap(dt,amount) values(sysdate - 28,3);
insert into test_olap(dt,amount) values(sysdate - 27,4);
insert into test_olap(dt,amount) values(sysdate - 26,5);
insert into test_olap(dt,amount) values(sysdate - 25,6);
insert into test_olap(dt,amount) values(sysdate - 24,7);
insert into test_olap(dt,amount) values(sysdate - 23,8);
insert into test_olap(dt,amount) values(sysdate - 22,9);
insert into test_olap(dt,amount) values(sysdate - 21,10);
insert into test_olap(dt,amount) values(sysdate - 20,11);select to_char(dt,'yyyy-mm-dd') ,sum(amount) over(order by to_char(dt,'yyyy-mm-dd')) from test_olap;
TO_CHAR(DT,'YYYY-MM-DD') SUM(AMOUNT)OVER(ORDERBYTO_CHAR
------------------------ ------------------------------
2010-08-01 1
2010-08-02 3
2010-08-03 6
2010-08-04 10
2010-08-05 15
2010-08-06 21
2010-08-07 28
2010-08-08 36
2010-08-09 45
2010-08-10 55
2010-08-11 66
11 rows selected
累计嘛
不就是sum(累计字段) over(order by 排序字段)如果是不同月要重新从1号开始统计
sum(累计字段) over(partition by 月份 order by 排序字段)
from tb a
from T
where T.Date between :date_begin and :date_end
group by to_char(T.Date,'yyyy-mm-dd')