多区间下求任意一个月的总额问题

MySql 码拜 9年前 (2015-11-16) 946次浏览
三个表:
    表1 : BaseInfo 基础数据 记录面积  收费开始日期 结束日期
    表2: Price    记录月单价 价格有效起始日期 结束日期

Create table BaseInfo
(
	id int(4) PRIMARY auto_increment,
  name varchar(10) not null ,
  area DECIMAL(10,2),
  feestartdate date,
  feeenddate date
);
  
Create table Price
(
     pid int(4) PRIMARY auto_increment,
		 name VARCHAR(10) not null,
		 amount DECIMAL(10,2),
     pricestartdate date,
     priceenddate date 
);
insert into BaseInfo(name,area,feestartdate,feeenddate) values(""A1"",25.2,""2015-06-05"",""2016-07-02""),(""A2"",31.2,""2015-06-01"",""2015-07-31""),(""A3"",20,""2015-06-30"",""2015-07-25"");
insert into Price(name,amount,pricestartdate,priceenddate) values(""A1"",2.5,""2015-01-01"",""2015-06-15""),(""A1"",3.1,""2015-06-16"",""2015-12-31""),(""A2"",3.1,""2015-01-01"",""2015-12-31""),(""A3"",3.1,""2015-01-01"",""2015-6-30""),(""A3"",2.9,""2015-07-01"",""2015-12-31"");

要求:任意一个月任意一个name的 月度总额。
规则如下:
     总额=面积*月单价
  
   计算的时候:
             1,需考虑name 计费起始日期,假如起始日期不为当日的1日,则以天数计算。
             如计算A3 6月份的总额 ,则这么计算如下: 面积:20*(1/30)*3.1 =2.07 元(结果四舍五入保留2位数),6月份计费从最后一天算起,所以只算一天。原因是单价为月单价,故除以30天。
             如计算A2 6月份的总额,则计算如下:面积 31.2*3.1=96.72。
            2.   计算时,月单价取值也需考虑有效期。假如一个月单价上半月和下半月价格不同,那么分别以天计算后,合并起来就是一月的总额。例如计算A1的 6月份的总额计算如下: 面积 25.2*((15-5+1)/30)*2.5+25.2*((30-16+1)/30)*3.1 = 62.16 元
            即计算时:需考虑计费有效日期 和 月单价有效日期。
原因是这个计算涉及到多区域日期的计算,本人尝试了一下,发现要么用函数,要么用SQL语句实现。目前对于SQL语句,暂无灵感。特放出来,大家研究研究,看看一条SQL语句能否可实现任意指定月份的计算。

解决方案:100分
看上去好复杂的需求啊。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明多区间下求任意一个月的总额问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)