2017-02-15 89 views
2

我正在为非政府组织的系统工作,该组织为穷人提供贷款并且没有任何利息,并且借款人偿还了该组织的月付款 我的逆向交易问题或退款当员工插入错误的价值支付,所以他应该撤销此交易 和我通过插入负值为此支付使它生成贷款收据报告(退款或反向交易)

我有贷款与下列:

id ║ amount ║ loan_date ║ created_on ║ emp_id  ║ client_id ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
1 ║ 10,000 ║ 2011-01-01 ║ 2010-01-01 ║ 100  ║ 600  ║ 

收据

id ║ loan_id ║ p_amount ║ p_date  ║ rev_p_id ║ created_on ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
1 ║ 1  ║ 500  ║ 2011-01-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
2 ║ 1  ║ 500  ║ 2011-02-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
3 ║ 1  ║ 500  ║ 2011-03-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
4 ║ 1  ║ -500  ║ 2011-04-01 ║ 2  ║ 2011-01-01 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
5 ║ 1  ║ 500  ║ 2011-05-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
6 ║ 1  ║ 500  ║ 2011-06-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
7 ║ 1  ║ 500  ║ 2011-07-01 ║ null  ║ 2011-01-01 ║ 

我的问题时,我想生成报告,我使用日期之间的总和查询例如 情况1 2011-01-01之间应该2011-06-01给我= 2500 和它的真实原因,因为支付号码2和它的相反之间的日期范围

case 2 between 2011-03-01至2011-06-01应该给我= 1500,因为它的反向支付ID 2,这不是在此期间不总结负收益

我怎么能确定何时我应该总结反向值或不是由MySQL 和PHP我使用笨和MySQL

回答

0

我会做你的receipts表自联接得到扭转交易的任何逆转的日期,并使用此日期来决定是否逆转是在报告期内:

select r1.loan_id, sum(r1.p_amount) sum_amount 
from receipts r1 
left join receipts r2 on r1.rev_p_id=r2.id 
where coalesce(r2.p_date,r1.p_date)>=... and coalesce(r2.p_date,r1.p_date)<=... 
group by r1.loan_id 

coalesce()函数用于返回第一个非空日期。对于正常付款,r2.p_date将为空(它不会反转任何内容),因此将使用实际的p_date。对于逆转r2.p_date将不为空(它将具有相反的付款日期),因此coalesce()将返回此日期。

+0

非常感谢你我现在试试你的解决方案 – maali

+0

你的解决方案不适合我,因为我需要获得所有收据,因为我们使用 – maali

+0

我很抱歉,但我没有明白你的观点。请详细说明。另外请记住,你的问题不是关于获取所有收据,而是关于在给定期间内获得一笔款项。 – Shadow