开发者社区> 问答> 正文

出一个SQL实现问题

样例数据如下,需要计算出每年每个账户的平均余额
要求如下:
例如用户1101,2015年度的平均余额计算为:((’2015-01-01‘ 到 '2015-01-02' 的天数)乘以 (上一个余额数600)加上 ( '2015-01-02' 到 今天的天数)乘以 -300)除以 (’2015-01-01‘ 到 今天的天数)

--account 账户
--cur_date 账户当前日期
--balance 账户当前日期的余额

create table test(account varchar(10),cur_date date,balance numeric);
insert into test values('1101','2014-12-02',600);
insert into test values('1101','2015-01-02',-300);
insert into test values('1102','2014-12-02',600);
insert into test values('1102','2014-12-30',-500);
insert into test values('1102','2015-01-02',-300);
insert into test values('1102','2015-02-01',200);

展开
收起
pger_joan 2015-12-23 17:58:14 3745 0
2 条回答
写回答
取消 提交回答
  • 一个PGer

    举个例子:假设每月30日,一年365日
    2015-1-1 至 2015-1-31 = 200 * 30 = 6000 --账户在上一年度最后余额为200元
    2015-2-1 至 2015-3-31 = 100 * 60 = 6000 --账户在2015-02-01当前余额为100元
    2015-4-1 至 2015-6-21 = 1000 * 80 = 80000 --账户在2015-04-01当前余额为1000元
    2015-6-22 至 2015-12-31 = 111 * 190 = 21090 --账户在2015-06-22当前余额为111元
    年日均= (6000+6000+80000+21090)/365 = 309.84

    但是以上有可能跨年,跨年时需要考虑上一年度的最后一个余额;
    如果为当年的年份,那么最后日期计算到今天。

    2019-07-17 18:23:04
    赞同 展开评论 打赏
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.

    描述可以再清晰一点。

    2019-07-17 18:23:04
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载