首页 > 解决方案 > 从付款和账单在同一字段中的表中计算付款拖欠。必须在 t-sql / sql

问题描述

我有一个如下表结构:

Account Number | Transaction Type   | Transaction Date   | Bill Due Date  | Transaction Number | Transaction Amount
---------------|--------------------|--------------------|----------------|--------------------|-------------------
1              | B                  |  7/03/2019         | 7/04/2019      | 1                  | $82.68 
1              | P                  |  12/03/2019        | 30/12/3999     | 2                  | $819.31 
1              | B                  |  22/02/2019        | 25/03/2019     | 3                  | $919.46 
2              | B                  |  3/04/2019         | 4/05/2019      | 1                  | $134.21 
2              | P                  |  8/04/2019         | 30/12/3999     | 2                  | $361.10 
2              | P                  |  13/04/2019        | 30/12/3999     | 3                  | $885.79 
3              | B                  |  6/03/2019         | 6/04/2019      | 1                  | $228.73 
3              | P                  |  11/03/2019        | 30/12/3999     | 2                  | $939.31 
3              | B                  |  31/03/2019        | 1/05/2019      | 3                  | $630.37 
4              | B                  |  20/04/2019        | 21/05/2019     | 1                  | $915.31 
4              | P                  |  25/04/2019        | 30/12/3999     | 2                  | $538.94 
4              | B                  |  2/04/2019         | 3/05/2019      | 3                  | $85.28 

我需要计算每个帐户的欠款,然后将其老化,即计算欠款的年龄。然后我按年龄(0-30,31-60,60-90,90+)存储它。如果付款,这是一个先进先出的过程(最早的欠款会先得到偿付)。付款后,账单到期日为 3999-12-31

我已经使用 SAS 构建了这个,因为我已经开发了一个信用评分汽车,但现在我需要在 SQL Server 2017 中实现它。我会使用 SAS 的 Retain Etc,但我还没有在 t-sql 中找到一个可以做到这一点的函数。

甚至可能吗?

我使用了滚动总和(-bill (B), +Pay(P)),但我正在努力应对拖欠的老化并将它们存储起来。

我还必须通过快照查看它,然后在这些上计算我的建模变量(我为此使用分析窗口函数)。

我也尝试过老化的窗口函数,但我无法复制我开发的 SAS 脚本的输出。

任何帮助将不胜感激。

表以帐号为索引,反式为。拥有大约 2 个工厂唯一帐号和 5 亿笔交易

输出将如下所示:

在此处输入图像描述

标签: sqlsql-servertsql

解决方案


推荐阅读