0

请有人能给我一些指示。

我们需要发出法定欠款通知。

发送它的标准是当一个帐户错过了 2 次全额付款或同等金额。即,如果他们应每月支付 100 英镑,但在 4 个月内只支付了 50 英镑,则他们应收到通知。

我已经提取了一个查询,该查询将还款计划分为多个日期范围,并且在每个范围之间我已经计算了该期间内的付款。同样对于每个结果,我都统计了 DueToDate 和 PaidToDate。

我遇到的问题是为每一行制定某种形式的评分系统,然后在查询结束时,计算出一个总分,以确定通知是否到期。

结果结构是这样的。

DueDate | DateFrom | DateTo | AmountDue | AmountPaid | DueToDate | PaidToDate
4

1 回答 1

1

如果您的意思是您已经有一个生成如下结果集的查询

DueDate | DateFrom | DateTo | AmountDue | AmountPaid | DueToDate | PaidToDate
20120301 | 20120201 | 20120229 | 100.00 | 50.00 | 100.00 | 50.00
20120401 | 20120301 | 20120331 | 100.00 | 50.00 | 200.00 | 100.00
20120501 | 20120401 | 20120430 | 100.00 | 50.00 | 300.00 | 150.00
20120601 | 20120501 | 20120531 | 100.00 | 50.00 | 400.00 | 200.00

那么这里有两种前进方式,具体取决于每月的 AmountDue 是否恒定。如果是,那么您可以使用

select *
from QueryResult
where DueToDate - PaidToDate >= 2 * AmountPaid;

如果它不是常数,那么您可以使用 SQL Server 2012 中的 LAG() 将前一行中的 AmountPaid 添加到当前行

;WITH Lagged AS (
  select *, PriorAmount = LAG(AmountPaid, 1, 0) OVER (order by DueDate)
  from QueryResult
)
select *
from Lagged
where DueToDate - PaidToDate >= AmountPaid + PriorAmount;

或者只是在原始查询的另一列中保留一个运行总计,例如

DueDate | DateFrom | DateTo | AmountDue | AmountPaid | DueToDate | PaidToDate | TwoPeriods
20120301 | 20120201 | 20120229 | 100.00 | 50.00 | 100.00 |  50.00 | 100.00
20120401 | 20120301 | 20120331 | 100.00 | 50.00 | 200.00 | 100.00 | 200.00
20120501 | 20120401 | 20120430 | 100.00 | 50.00 | 300.00 | 150.00 | 200.00
20120601 | 20120501 | 20120531 | 100.00 | 50.00 | 400.00 | 200.00 | 200.00
于 2013-04-20T11:53:21.523 回答