在 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 应该做你的工作。你是怎么用的? 您如何订购这些记录:by Date 把你的尝试放在你的问题中,@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 行之间计算的主要内容,如果未能解决你的问题,请参考以下文章

如何计算熊猫数据框中组的每对行之间的函数

如何计算所有可能行之间的相关性

sql查询计算不同列和相邻行的两个日期之间的差异

计算SQL中的行之间花费的时间

如何查找和计算两个不同数据帧之间的重复行数? [关闭]

如何按行名计算行之间的时间差并仅提取最近的行?