场景:一个表中保存了一笔借款的12期还款计划。
求一个计算每一期次的剩余本金的SQL。
例如: 本金120,每期应还本金为10,则第一期剩余本金110,第二期剩余本金100,依次往后递减

解决方案 »

  1.   

    declare @test table(Period int, Amt float)declare @amt float =120
    declare @period int = 12
    insert into @test(Period,Amt) values(1, @amt-@amt/@period)declare @i int =1
    while @i<@period
    begin
    set @i = @i+1
    insert into @test(Period,Amt) values(@i,@amt-@i*@amt/@period)
    endselect * from @testPeriod Amt
    1 110
    2 100
    3 90
    4 80
    5 70
    6 60
    7 50
    8 40
    9 30
    10 20
    11 10
    12 0
      

  2.   

    mysql8.0以后可以直接用递归WITH RECURSIVE cte (p_amt, p_int) AS
    (
      SELECT 120, 0 from dual
      UNION ALL
      SELECT p_amt - 10, p_int + 1 FROM cte WHERE cte.p_int < 12
    )
    SELECT * FROM cte where cte.p_int > 0;