oracle 疑难查询语句,复杂算法求助
现在有两个表:表1:客户开户信息表字段两个字段:客户账号,开户日期,表结构如下:
表1 :khxx表结构:客户账号唯一,不重复
clientid(客户账号) opendate(开户日期-number型)
10321183 20170621
10321156 20180122
............
表2:每个客户在历史上每个月的当月资产日均值:客户资产当月日均值表
表2结构:
zcmonth(月份) clientid(客户账号) zcavg(资产当月日均值)
201701 10321183 2560
201701 10321156 3502
… … …
201704 10321183 2510
201704 10321156 1180
… … …
201702 10321183 2560
201702 10321156 3420
… … …
需要求的结果:
大致描述:根据表1中客户开户日期及表2月日均资产值计算从开户日期,到当前日期(2018年1月31)的该客户的日均资产值,并列出累计资产值和累计天数。
比如:客户10321183,该客户开户日期是20170621,那就找到表2中201706月份该客户的当月月均值(记该值为A),然后在表1中查找从20170621开始到当月低所有有开户数据的日期天数记录为B=select count(distinct(opendate)) from khxx where opendate between 20170621 and 20170630,那这客户在开户当月每天的资产累计值记为C:那么C=A*B,该客户在2017年7月开始往后,都是用当月月均值乘以天数,当月均值直接取表2中相应的月均值,天数要取表1客户开户信息表中相应月份开户日期的不同天数,如201707月份天数= select count(distinct(opendate)) from khxx where opendate between 20170701 and 20170731,(这个天数不是工作日也不是自然日,而是产生开户的日期天数)以上计算每月的累计资产值汇总及累计天数汇总后,两项相除,即为要求的日均值。备注:最后一月是整月,只到20180131,后面没单独的天数。