如何解决需要一个聚合 MySQL 选择,它在日期范围内虚拟迭代并返回账单
我有一个名为 rbsess 的 MysqL 表,其中包含 RBSessID (key)、ClientID (int)、RBUnitID (int)、RentAmt (fixed-point int)、RBSessstart (DateTime) 和 PrevID(int,对 RBSessID 的引用)。
它不是交易性的或链接的。它跟踪客户何时搬入房间以及搬入时的租金是多少。查找特定客户在特定日期的租金的查询是:
SET @DT='Desired date/time'
SET @ClientID=Desired client id
SELECT a.RBSessID,a.ClientID,a.RBUnitID,a.RentAmt,a.RBSessstart,b.RBSessstart AS RBSessEnd,a.PrevID
FROM rbsess a
LEFT
JOIN rbsess b
ON b.PrevID=a.RBSessID
WHERE a.ClientID=@ClientID
AND (a.RBSessstart<=@DT OR a.RBSessstart IS NULL)
AND (b.RBSessstart>@DT OR b.RBSessstart IS NULL);
+----------+----------+----------+---------+---------------------+-----------+--------+
| RBSessID | ClientID | RBUnitID | RentAmt | RBSessstart | RBSessEnd | PrevID |
+----------+----------+----------+---------+---------------------+-----------+--------+
| 2 | 4 | 1 | 57500 | 2020-11-22 00:00:00 | NULL | 1 |
+----------+----------+----------+---------+---------------------+-----------+--------+
我也有
SELECT * FROM rbsess WHERE rbsess.ClientID=@ClientID AND rbsess.PrevID IS NULL; //for finding the first move in date
SELECT TIMESTAMPDIFF(DAY,@DT,LAST_DAY(@DT)) AS CountDays; //for finding the number of days until the end of the month
SELECT DAY(LAST_DAY(@DT)) AS MaxDays; //for finding the number of days in the month
SELECT (TIMESTAMPDIFF(DAY,LAST_DAY(@DT))+1)/DAY(LAST_DAY(@DT)) AS ProRateratio; //for finding the ratio to calculate the pro-rated rent for the move-in month
SELECT ROUND(40000*(SELECT (TIMESTAMPDIFF(DAY,LAST_DAY(@DT))+1)/DAY(LAST_DAY(@DT)) AS ProRateratio)) AS ProRatedRent; //for finding a pro-rated rent amount based on a rent amount.
我无法将所有这些放在一起形成一个查询,该查询可以根据开始日期和可选的结束日期在单个报表中输出按比例分配的全部租金金额时期。我可以添加一个收到的支付表并在之后整合它,只是在 MysqL 查询中使用这个看似简单的现实世界概念很难。我正在使用带有 MysqL 后端的 PHP。临时表作为中间查询是可以接受的。
即使是轻推也会有帮助。我对 MysqL 查询的经验并不丰富,只是您的基本 CREATE、SELECT、INSERT、DROP 和 UPDATE。
GMB 要求的示例:
//Example data in rbsess table:
+----------+----------+----------+---------+---------------------+--------+
| RBSessID | ClientID | RBUnitID | RentAmt | RBSessstart | PrevID |
+----------+----------+----------+---------+---------------------+--------+
| 1 | 4 | 1 | 40000 | 2020-10-22 00:00:00 | NULL |
| 2 | 4 | 1 | 57500 | 2020-11-22 00:00:00 | 1 |
| 3 | 2 | 5 | 40000 | 2020-11-29 00:00:00 | NULL |
+----------+----------+----------+---------+---------------------+--------+
预期结果将是每个月所欠租金金额的列表,包括从几个月的日期范围开始的一个月内部分入住的按比例分配的金额。例如,对于来自 ClientID=4 的客户的跨越 2020 年全年日期范围的示例数据,该查询将为每个月生成一个类似于以下范围的金额:
Month | Amt
2020-10-1 | 12903
2020-11-1 | 45834
2020-12-1 | 57500
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。