如何根据记录(账户#)更改值时查询金额

问题描述 投票:0回答:1

当金额根据记录发生变化时,我试图查询金额。例如下表。 我想查询带有 (****) 的行。我想知道每个账户的余额何时发生变化。一旦我有了这个,我想显示从最新余额到之前余额变化的差异...所以对于 acct 123456 我想查询余额何时从 1000 变化到 2000 并显示另一个查询中的差异不需要全部在一个查询中。希望我能理解任何帮助,不胜感激。

ACCT 平衡 时间
123450 1000.00 2008-01-30 00:00:00.000****
123456 1000.00 2008-02-29 00:00:00.000
123456 1000.00 2008-03-31 00:00:00.000
123456 1000.00 2008-04-30 00:00:00.000
123456 1000.00 2008-05-31 00:00:00.000
123456 2000.00 2008-06-30 00:00:00.000****
654321 1000.00 2008-02-29 00:00:00.000
654321 2000.00 2008-03-31 00:00:00.000****

想要查询结果

ACCT 平衡 时间
123450 1000.00 2008-01-30 00:00:00.000****
123456 2000.00 2008-06-30 00:00:00.000****
654321 2000.00 2008-03-31 00:00:00.000****

我找到了下面的查询,但它不适用于我正在寻找的内容。

DECLARE @x TABLE(acct INT,  balance money,[time] DATETIME)

INSERT @x VALUES
(123450,'1000.00','2008-01-30 00:00:00'),
(123456,'1000.00','2008-02-29 00:00:00'),
(123456,'1000.00','2008-03-31 00:00:00'),
(123456,'1000.00','2008-04-30 00:00:00'),
(123456,'1000.00','2008-05-31 00:00:00'),
(123456,'2000.00','2008-06-30 00:00:00'),
(654321,'1000.00','2008-02-29 00:00:00'),
(654321,'2000.00','2008-03-31 00:00:00');
select * from @x
; with temp as
(
SELECT 
    acct, balance, [time],  lag(balance) over (order by [time] ) as lastValue
FROM    @x
) 
SELECT 
    acct,[time] , balance
FROM 
    temp 
WHERE acct > lastValue
order by acct, time 
sql t-sql common-table-expression
1个回答
0
投票

您正在比较您的帐号和余额,这不是您想要的。 与上次余额比较:

WITH temp AS (
    SELECT 
        acct, 
        balance, 
        [time],  
        LAG(balance) OVER (ORDER BY [time]) AS lastValue
    FROM @x
)
SELECT 
    acct,
    [time],
    balance
FROM temp
WHERE balance <> lastValue
ORDER BY acct, [time];
© www.soinside.com 2019 - 2024. All rights reserved.