如何使用 Teradata SQL 执行未来现金流量预测?

How to perform future cashflow projections using Teradata SQL?

我正在努力使用 SQL 获得未来的现金流。它包括未结余额、标准付款、利息和本金。目前我在 excel 中有报告,但我需要在 Teradata 中得到完全相同的东西。

我想把我的问题分为两部分:

  1. 从 table 获取当前余额和利率(足够简单)

  2. 生成未来 20 天的未来日期和项目(不确定如何操作)

到目前为止,我已经尝试了 windows 功能,但无法做到。

SELECT
   "Account Number"
   ,"Business Date"
   ,"Outstanding Balance"
   ,"Standard Payment" 
   ,"Current Balance" - "Standard Payment" "Dummy Balance" 
   ,MAX("Dummy Balance" ) OVER (PARTITION BY "Account Number" ORDER BY "Business    Date" ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING  )"Prev Balance"
FROM table
  where [<Conditions>]
  GROUP BY 1,2,3,4
  ORDER BY "NEXT DAYS";

如图所示,期末余额回到期初余额字段,利息和本金是根据这个新的期初余额值计算的。

例如,第一行的期初余额为100,在100的基础上计算利息和本金,然后从期初余额中减去,得到期末余额为99.70200384。在下一行中,这成为期初余额,所有其他值均基于此计算。

这可以在 SQL 中完成吗?

你需要一些递归 SQL。假设您每个帐户一行,并希望获得接下来的 10 天:

WITH RECURSIVE cte AS
 (
   SELECT 
      account_number,
      Cast(100 AS DECIMAL(38,8)) AS balance,
      0.56466283 AS payment,
      0.00266666667 AS interest_rate,
      balance * interest_rate AS interest,
      payment - interest AS principal,
      balance - principal AS end_balance,
      Current_Date AS dt
   FROM mytable

   UNION ALL

   SELECT
      account_number,
      end_balance,
      payment,
      interest_rate,
      end_balance * interest_rate AS new_interest,
      payment - new_interest AS new_principal,
      end_balance - new_principal AS new_balance,
      dt+1 as new_dt
   FROM cte
   WHERE new_dt < Current_Date+10
 )
SELECT * 
FROM cte 
ORDER BY account_number, dt