我对新版本的SQL Server 2016很新,并且没有使用新的LAG& LEAD功能还没有。
如果我理解正确,那么在我们当前使用ROW_NUMBER()函数并进一步加入结果以按特定顺序连接记录的情况下,它将使工作更容易。
我目前使用这种方式连接记录的情况是:
;WITH IncrementingRowNums AS
(
SELECT d.MyKey
,d.Outstanding
,d.Rate
,AMO.PaymentAmount
,AMO.AmoDate
,ROW_NUMBER() OVER (PARTITION BY d.MyKey ORDER BY AMO.AmoDate ASC) AS RowNum
FROM Deals d
INNER JOIN Amortization AMO
ON d.MyKey = AMO.MyKey
),
lagged AS
(
SELECT MyKey
,Outstanding AS new_outstanding
,Rate
,PaymentAmount
,AmoDate
,RowNum
FROM IncrementingRowNums
WHERE RowNum = 1
UNION ALL
SELECT i.MyKey
,(l.new_outstanding - l.PaymentAmount)
* (1 + i.Rate * (DATEDIFF(DAY,l.AmoDate, i.AmoDate)/365.25))
AS new_outstanding
,i.Rate
,i.PaymentAmount
,i.AmoDate
,i.RowNum
FROM IncrementingRowNums i
INNER JOIN lagged l
ON i.RowNum = l.RowNum + 1
AND i.MyKey = l.MyKey
使用LAG和LEAD功能解决此解决方案的最佳方法是什么? 我尝试了几种方法,但它从未解决过。
我唯一想要计算的是new_outstanding列。
其计算如下:
(previous_record.new_outstanding - previous_record.PaymentAmount)
* (1 + current_record.Rate * (DATEDIFF(DAY,previous_record.AmoDate, current_record.AmoDate)/365.25))
由于rextester上没有SQL Server 2016版本,我只能提供一些测试数据和我以前的递归计算解决方案:http://rextester.com/WVTM46505 感谢