付款分析 - SQL服务器查询

时间:2013-04-20 11:42:20

标签: sql-server sql-server-2008

请有人给我一些指示。

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

发送出去的标准是帐户错过了2笔全额付款或相当于。即如果他们每月支付100英镑但仅在4个月内支付50英镑,他们就应该通知了。

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

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

结果结构是这样的。

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

1 个答案:

答案 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