我正在为非政府组织制定系统,为没有任何利益的穷人提供贷款,借款人每月向组织偿还款项 当员工插入错误值的付款时,我发生逆向交易或退款的问题,因此他应该对此交易进行反向操作 我通过插入此付款的负值
来实现我有贷款 表,其中包含以下列:
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和它在日期范围之间的反向
案例2 在2011-03-01到2011-06-01之间应该给我= 1500并且不对负收据求和,因为它与付款ID 2相反并且不在此期间
我如何确定何时应该通过mysql对反向值求和 和php我正在使用codeigniter和mysql
答案 0 :(得分: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()
将返回此日期。