表数据(daydetail)
date cnt price totalcnt totalprint
20170101 1 10 1 10
20170102 1 10 2 20
20170103 1 10 3 30
20170104 2 20 5 50
其中 totalcnt totalprice 为合计值。这2个值 怎样动态算出来
每一天都是之前的合计
一个sql能实现吗?
类似于 select date,cnt, price (select sum(cnt) totalcnt,sum(price) totalprice from daydetail where *****************) from daydetail
select date,cnt, price (select sum(cnt) from daydetail)totalcnt,(select sum(price) from daydetail)totalprice from daydetail;
这样调用sum函数应该就可以出来了,感觉你的思路就可以解决这个问题了啊,还是这个问题我理解的不对?
WITH
SJ AS(
SELECT 20170101 "DATE", 1 CNT, 10 PRICE FROM DUAL
UNION ALL
SELECT 20170102 "DATE", 1 CNT, 10 PRICE FROM DUAL
UNION ALL
SELECT 20170103 "DATE", 1 CNT, 10 PRICE FROM DUAL
UNION ALL
SELECT 20170104 "DATE", 2 CNT, 20 PRICE FROM DUAL
)
SELECT
"DATE"
,CNT
,PRICE
,SUM(CNT) OVER(ORDER BY "DATE") TOTALCNT
,SUM(PRICE) OVER(ORDER BY "DATE") TOTALPRICE
FROM SJ
select date, cnt*price totalcnt totalprint from
使用窗口函数:
select date,cnt,price,
sum(cnt) over(order by date) as totalcnt,
sum(cnt*price) over(order by date) as totalprint
from daydetail;
从你的需求觉得你可能是要做报表,不知道你的数据量多大,如果每天几十万,非常不建议这样做,单独做一个每天数据统计的,统计的时候只增加一天的数据到原来的数据上面,不然你这个需求逻辑每天一次接近于笛卡尔积的循环,生产机器会吃不消的,性能要着重考虑。