Sql 在两行之间计算

Sql 在两行之间计算,sql,tsql,Sql,Tsql,不知是否有人能帮忙? 我有一个问题,我需要计算第1行和第2行之间的差异,然后将其输入另一列 首先,我需要获取列中的值,然后根据第3行进行计算,然后在新列的另一行中输入该值 然后使用该值计算第4行,依此类推 不确定是否可以这样做,任何帮助都将不胜感激 尝试过领先/落后、密集排名 下表为原始数据 Col1 Col2 Col3 Amt Date 10000 142211 1 -64.05 2005-07-19 10000 142211 2 64.05 200

不知是否有人能帮忙? 我有一个问题,我需要计算第1行和第2行之间的差异,然后将其输入另一列

首先,我需要获取列中的值,然后根据第3行进行计算,然后在新列的另一行中输入该值

然后使用该值计算第4行,依此类推

不确定是否可以这样做,任何帮助都将不胜感激

尝试过领先/落后、密集排名

下表为原始数据

Col1    Col2    Col3    Amt Date
10000   142211  1   -64.05  2005-07-19
10000   142211  2   64.05   2005-07-01
10000   142211  3   -74.91  2005-08-17
10000   142211  4   74.91   2005-08-01
10000   142211  5   -74.91  2005-09-19
10000   142211  6   74.91   2005-09-01
10000   142211  7   0.00    2005-01-01
10000   142211  8   74.91   2005-10-01
10000   142211  9   -74.91  2005-10-19
10000   142211  10  74.91   2005-11-01

1和2之间的差异将进入一个新列

您只需要
LAG
函数。试试看:

SELECT *, Amt - LAG(Amt, 1, 0) OVER (ORDER BY UpdatedDate ASC)
FROM dbo.crm_Transactions
WHERE TenancyRef = '142211'
ORDER BY TenancyRef
    ,TransNo ASC

您正在描述一个听起来像累积函数的函数。然而,我不认为有什么区别是有用的。我认为累积总数是有用的。你会被数据中的负值弄糊涂

所以,这可能是你真正想要的:

select t.*,
       sum(amount) over (partition by col1, col2 order by col3) as running_amount
from t;

将预期结果张贴在示例数据旁边。LAG应该完成您的工作。您是如何使用它的?您是如何订购这些记录的:
日期
?请将您的尝试放在您的问题中,@Stevewh,而不是评论中。感谢上述内容,@gordon是的,您的权利我们需要一个连续的余额,但这并没有完全满足我们的需要。@阿波美尼,差不多也在那里。最终结果看起来像下面的Trans-Amt TransNo TransDate-64.051 2005-07-19-64.0564.052 2005-07-01 0.00-74.913 2005-08-17-74.9174.914 2005-08-01 0.00-74.915 2005-09-19-74.9174.916 2005-09-01 0.00 0.007 2005-01-01 0.0074.918 2005-10-10-01 74.0074.9110-11-10-10.91