【问题标题】:Combine two tables and use sort by FIFO合并两张表,使用先进先出排序
【发布时间】:2020-12-04 12:20:26
【问题描述】:

我被 MySQL 查询卡住了。

第一个表只包含一个loan_number 的贷款。


(loan_number, tranche_number, daydate, bills),

(555555, 1,'2020-01-01', 100),

(555555, 2,'2020-01-06', 100)

第二张表包含付款。


(loan_number, daydate, bills)

(555555,'2020-01-02', -10),

(555555,'2020-01-03', -10),

(555555,'2020-01-04', -10),

(555555,'2020-01-05', -20),

(555555,'2020-01-07', -50),

(555555,'2020-01-10', -100),

(555555,'2020-01-11', -10)

我需要按 FIFO 顺序组合上面的两个表(首先是贷款,然后是涵盖该贷款的付款数量)。 结果应该是这样的。

(loan_number, tranche_number, daydate, bills),

(555555, 1,'2020-01-01', 100 ),

(555555, 1,'2020-01-02', -10 ),

(555555, 1,'2020-01-03', -10 ),

(555555, 1,'2020-01-04', -10 ),

(555555, 1,'2020-01-05', -20 ),

(555555, 1,'2020-01-07', -50 ),

(555555, 2,'2020-01-06', 100 ),

(555555, 2,'2020-01-10', -100),

(555555, 2,'2020-01-11', -10)

【问题讨论】:

  • 那么您想要同时拥有贷款行和所有付款吗?我还假设您希望它适用于具有多个不同loan_numbers 的表
  • 事实上你的例子不太合理——我们如何将tranche与任何给定的付款联系起来?
  • 不,我想要一笔可以支付该贷款的贷款和付款,例如第一次贷款 100,付款 -50,-50 比第二次贷款和后续付款。
  • @El Ronnoco,这是我要解决的问题。我需要按账单金额匹配贷款和后续付款。例如,第一笔贷款有第一笔。涵盖该贷款的第一批付款也将包含第一批(该顺序中的所有付款)。

标签: mysql sql fifo


【解决方案1】:

听起来你想要union all。但是,诀窍是获取tranch_number。注意:给定的付款可能有多个批次。以下应返回最早的付款付款:

select loan_number, tranche_number, daydate, bills
from table1
union all
select t2.loan_number, t1.tranche_number, t2.daydate, t2.bills
from (select t2.*,
             sum(bills) over (partition by loan_number order by daydate) as running_bills
      from table2 t2
     ) t2 join
     (select t1.*,
             sum(bills) over (partition by loan_number order by daydate) as running_bills
      from table1 t1
     ) t1
     on - (t2.running_bills - t2.bills) >= t1.running_bills - t1.bills and
        - t2.running_bills <= t1.running_bills;

请注意,这需要 MySQL 8+。

Here 是一个 dbfiddle。

【讨论】:

  • 你说得对。只要没有分期付款,此解决方案就可以工作。
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 2013-10-28
  • 2015-11-08
  • 2018-10-04
  • 2019-01-30
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多