【问题标题】:MySQL query to calculate rent owed based on a partial paymentMySQL 查询根据部分付款计算所欠租金
【发布时间】:2018-04-14 22:00:17
【问题描述】:

我可能可以通过 PHP 代码执行以下操作,但我觉得这很可能在 MySQL 中完成,所以只是寻找帮助我查询的人。

我有一个定义客户每月付款的合同表,例如,它是每月 500 英镑。然后我有另一个名为rent 的表,其中输入了每个月的租金。每个租金都有一个状态,称为已付、未付和部分。

到目前为止,我的查询如下,我是否必须进行多个子查询,或者是他们的简单方法。

SELECT cc.property_id, cc.property_rent, r.order_total, r.order_status,  
       SUM(CASE WHEN r.order_status = 'Partial' THEN cc.property_rent - r.order_total ELSE 0 END) AS partial_rent_owed
FROM t_customers_contract cc JOIN
     t_customers_rent r
     ON cc.customer_id = r.customer_id                                                   WHERE cc.property_id = 62 AND r.transaction_type = 'rent' AND
      (r.date_created BETWEEN '2017-04-05' AND '2019-04-05')
GROUP BY cc.property_id

基本上,如果租金状态是部分的,则从通常情况中减去它,然后是所欠的总和。

期望的结果将是每个财产的欠款和贡献的总和,如下输出:

property_id、total_rent_made、total_rent_owed

目前合约表结构及数据如下:

目前租金表结构及数据如下:

如您所见,order_id 20 和 27 是部分付款,根据合同为这些 ID 支付的实际付款应为 750 和 700。

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • 嗨@GordonLinoff,让我为你安排一下。谢谢。
  • 嗨@GordonLinoff 我刚刚更新了主要描述,是不是更好?

标签: mysql sql select


【解决方案1】:

我已经设法解决它,它是以下查询。如果有人可以改进它,很乐意根据性能或更清洁提出建议。

SELECT cc.property_id, 
SUM(CASE WHEN r.order_status = 'Partial' THEN (cc.property_rent - r.order_total) ELSE 0 END) AS partial_rent_owed
FROM t_customers_contract cc JOIN t_customers_rent r ON (cc.property_id = r.property_id)
WHERE cc.contract_id = r.contract_id
AND cc.customer_id = 7866
AND r.transaction_type = 'rent'
AND (r.date_created BETWEEN '2016-04-05' AND '2019-04-05')
GROUP BY cc.property_id

【讨论】:

  • 您如何记录应用于单个月租金的多次部分付款?滞纳金会起作用吗?
  • 用户只需更新当前的租金金额并做一个记录。任何滞纳金都将被视为费用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
相关资源
最近更新 更多