在 2 行之间计算
Posted
技术标签:
【中文标题】在 2 行之间计算【英文标题】:Calculate between 2 rows 【发布时间】:2019-10-24 09:32:12 【问题描述】:想知道是否有人可以提供帮助? 我有一个问题,我需要计算第 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 应该做你的工作。你是怎么用的? 您如何订购这些记录:byDate
?
把你的尝试放在你的问题中,@SteveWWH,而不是 cmets。
【参考方案1】:
你只需要LAG
函数。试试喜欢:
SELECT *, Amt - LAG(Amt, 1, 0) OVER (ORDER BY UpdatedDate ASC)
FROM dbo.crm_Transactions
WHERE TenancyRef = '142211'
ORDER BY TenancyRef
,TransNo ASC
【讨论】:
感谢上述,@gordon 是的,您的权利,我们需要一个运行平衡,但这并没有完全满足我们的需要。 @apomene,也差不多。最终结果如下所示 Trans-Amt TransNo TransDate -64.05 1 2005-07-19 -64.05 64.05 2 2005-07-01 0.00 -74.91 3 2005-08-17 -74.91 74.91 4 2005-08-01 0.00 -74.91 5 2005-09-19 -74.91 74.91 6 2005-09-01 0.00 0.00 7 2005-01-01 0.00 74.91 8 2005-10-01 74.91 -74.91 9 2005-10-19 0.00 -54.91 10409 10409 74.91 11 2005-11-17 0.00【参考方案2】:您正在描述听起来像累积函数的东西。但是,我认为差异没有用。我认为累积总和很有用。 . .并且您对数据中的负值感到困惑。
所以,这可能就是你真正想要的:
select t.*,
sum(amount) over (partition by col1, col2 order by col3) as running_amount
from t;
【讨论】:
以上是关于在 2 行之间计算的主要内容,如果未能解决你的问题,请参考以下文章