请有人给我一些指示。
我们需要发出法定拖欠通知。
发送出去的标准是帐户错过了2笔全额付款或相当于。即如果他们每月支付100英镑但仅在4个月内支付50英镑,他们就应该通知了。
我已经提出了一个查询,将还款计划分为日期范围,并在每个范围之间计算了该期间内的付款。同样,对于每个结果,我都计算了DueToDate和PaidToDate。
我遇到的问题是为每一行制定某种形式的评分系统,然后在查询结束时,计算得出总分,以确定通知是否到期。
结果结构是这样的。
DueDate | DateFrom | DateTo | AmountDue | AmountPaid | DueToDate | PaidToDate
答案 0 :(得分: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