计算T-SQL中的先前值(更新)

时间:2013-04-04 16:53:56

标签: sql sql-server sql-server-2008 tsql

我正在努力争取一些SQL逻辑。

数据集示例

wid  CCVnr  Amount  Reference  Seq  Month      ColumIwant=PreviousAmount
11   15946  20      50         1    1/1/2013   NULL
12   15946  20      50         2    1/2/2013   NULL
13   15946  20      50         3    1/3/2013   NULL
14   15946  20      50         4    1/4/2013   NULL
15   15946  20      50         5    1/5/2013   NULL
16   15946  20      50         6    1/6/2013   NULL
35   15946  20      50         1    1/1/2013   NULL
36   15946  10      50         2    1/2/2013   20
37   15946  10      50         3    1/3/2013   20
38   15946  10      50         4    1/4/2013   20
39   15946  10      50         5    1/5/2013   20
40   15946  10      50         6    1/6/2013   20
88   15946  10      50         1    1/1/2013   20
89   15946  20      50         2    1/2/2013   NULL
90   15946  25      50         3    1/3/2013   10
91   15946  25      50         4    1/4/2013   10
92   15946  25      50         5    1/5/2013   10
93   15946  25      50         6    1/6/2013   10

我有5个第一列,我想'计算'最后一列:PreviousAmount。 对我来说,问题是,每次所有6个月都被重新加载,所以不足以查看“已更改”值,您还必须考虑到历史记录。
(我首先有一段代码用CTE比较一行到下一行但是像这样我错过了历史......)

这里的情况是:客户每月可以支付他想要支付的金额: 在这种情况下,将其从20更改为10到25。

我上传了一个CSV文件或我正在使用的数据集: https://mega.co.nz/#!oZhC0RxB!CzzMx3Yr6Kx1_1N9scuNqwJnqoZDGUXte47iOPkLG-E

我们使用SQL Server 2008 R2。 表中有20M这样的行。因此,光标可能不是最佳选择(?)

非常感谢您的帮助! →


更新: 我添加了一个wid列,因为原始数据集还包含一个wid列。 @ Mark Ba​​nnister 逻辑是查看'金额',在某个月的时间内,金额会被用户更改:     *“新金额”时,所有下个月都会更新     *我们计算之前的金额=金额是之前的数量

@ Love2Learn 也感谢您的评论。还有更多列,但您必须知道在stackoverflow代码块中添加更多列并不容易。 因此,我还上传了一个CSV文件,您可以从中找到该链接。我添加的相关专栏是'wid'。

通常应该有足够的信息和列来计算前一行。 提前致谢!  

1 个答案:

答案 0 :(得分:0)

您需要某种客户编号 - 以识别这些组。说这是custid

select t.*,
       (select top 1 
               amount from t t2 where t2.custid = t.custid and t2.month < t.month order by t2.month
       ) as prevAmount
from t