SQL每日一题(20231031)

2024-04-25 10:00:52 浏览数 (2)

题目

有一张充值表G1031,先需要根据财务的需求,根据充值日期、有效天数和充值金额分摊到2020年最后一天,即2020年12月31日。 先举例测试数据5条,如下:

需要得到如下的表,即在上表的基础上增加两列分摊金额和剩余金额。分摊金额时,包括充值日期和2020年12月31日这两天,即包括头尾日期。

得到的结果如下:

请问这个sql如何写?谢谢!

解释:例如2020-09-10这天充值了2000元,从2020-09-10到2020-12-31日这一天总共有113天,实际有效期为240天,那么到2020-12-31日这一天,需要分摊这2000元的金额计算方式为:2000/240*113=941.6629。如果有效天数小于到2020-12-31日这天的天数,那么就全部分摊。

测试数据

代码语言:javascript复制
CREATE TABLE G1031
(
订单号 VARCHAR(10),
充值日期 DATE,
充值金额 MONEY,
充值产品 VARCHAR(100),
有效天数 INT
)
 
INSERT INTO G1031 VALUES('1001','2020-07-01',500.00,'初一数学提高班',90)
INSERT INTO G1031 VALUES('1002','2020-08-04',1000.00,'成人英语口语突破班',30)
INSERT INTO G1031 VALUES('1003','2020-09-10',2000.00,'初三数学提高班',240)
INSERT INTO G1031 VALUES('1004','2020-11-15',3000.00,'高三语文作文提高班',360)
INSERT INTO G1031 VALUES('1005','2020-12-20',2000.00,'高一物理精讲班',60)

0 人点赞