我正在努力争取一些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 Bannister 逻辑是查看'金额',在某个月的时间内,金额会被用户更改:
*“新金额”时,所有下个月都会更新
*我们计算之前的金额=金额是之前的数量
@ Love2Learn 也感谢您的评论。还有更多列,但您必须知道在stackoverflow代码块中添加更多列并不容易。 因此,我还上传了一个CSV文件,您可以从中找到该链接。我添加的相关专栏是'wid'。
通常应该有足够的信息和列来计算前一行。 提前致谢!
答案 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