【问题标题】:How to perform future cashflow projections using Teradata SQL?如何使用 Teradata SQL 进行未来现金流预测?
【发布时间】:2019-06-11 15:42:50
【问题描述】:

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

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

  1. 从表格中获取当前余额和利率(很简单)

  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 中实现吗?

【问题讨论】:

  • 那么从第二行开始,您希望起始余额为前一行的期末余额?
  • 是的,没错。
  • 在窗口函数中使用 LAG 或 LEAD 而不是 MAX
  • @JoakimDanielson,ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING 完成与滞后相同的事情。
  • 几天以来我一直被这个问题困扰。你能给我一些关于如何解决这个问题的想法吗?谢谢:)

标签: sql teradata


【解决方案1】:

您需要一些递归 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

【讨论】:

  • 非常感谢。我的每个帐户都有一个“还款日期”字段,客户每月还款。例如,如果下一个还款日期是 15/06/2019,那么我需要查看 15/07/2019、15/08/2019 等直到到期日的还款。你能告诉我如何包括那个条件或者只是给我一些方向吗?再次感谢工厂
  • 使用 add_months(repayment_date, 1) 添加一个月而不是一天,并将其与到期日期进行比较。或过滤where new_balance &lt;= 0)
猜你喜欢
  • 1970-01-01
  • 2019-08-09
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多