我有一个事务日志,并且此日志上的事务不正确。
transaction Price balance
-------------------------------
121 50 -50
122 100 0
123 50 100
124 50 250
在此示例中,transactionPrice行122的值不正确。我插入了一条记录,以便以正确的总金额将金额记入帐户,但我们的系统现在正在使整个帐户失去平衡。删除插入后,我现在需要更新所有记录以使它们正确,我有一个问题。
我试图创建一个具有正确值的文本生成器,而不是通过并手动为每个记录进行数学运算,我正在尝试使用“total”或“currentvalue”。
这是问题所在。在事务THIS
之后,transactionPrice = 150.00
记录balance
和500
。在此事务之后,update
NEXT transaction
我需要PREVIOUS事务值。我需要获得500,以便我可以从先前的交易中减去CURRENT balance
的交易价值。
650 - 150 = 500
500 - 125 = 375
如何从之前的记录中获得500分? (注意:此命令由desc命令,因此“previous”上升ROW_NUMBER()
,129之前是128之前的127之前
我无法使用Lag(....)
,我尝试了ROW_NUMBER() OVER(....)
方法,但我似乎无法获得该行的实际内容,只是数字本身。
我的陈述的例子。我们正在查看SET Balance = ' + CAST(...)
SELECT
'UPDATE table
SET transactionPrice = ' + CAST(@CorrectPrice as nvarchar(50)) + ', SET Balance = ' + CAST(Balance as nvarchar(50)) + '
WHERE UsageId = ' + CAST(c.UsageId as nvarchar(50)) as 'UpdateQueriesToRun'
FROM
table
WHERE
ContractId = @ContractID
AND DateActive IN (SELECT DateActive
FROM table
WHERE ContractId = @ContractID)
ORDER BY
DateActive DESC
我需要的伪代码版本
SELECT
'SET Balance = ' + CAST((PREVIOUS_ROW.BALANCE - @CorrectPrice) as nvarchar(50)) + '
WHERE ID = ' + CAST(ID as nvarchar(50)) as 'INSTRUCTIONS'
FROM
table
答案 0 :(得分:0)
您可以在SQL Server 2008中模拟lag
函数。这里有一些示例,这是我在该主题上找到的最佳文章。