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

redcn2004 2015-10-28 01:47:12
三个表:
表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语句是否可实现任意指定月份的计算。

...全文
144 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
redcn2004 2015-11-10
  • 打赏
  • 举报
回复
事实上我自己搞定了
LongRui888 2015-10-30
  • 打赏
  • 举报
回复
看上去好复杂的需求啊。。。

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧