当金额根据记录发生变化时,我试图查询金额。例如下表。 我想查询带有 (****) 的行。我想知道每个账户的余额何时发生变化。一旦我有了这个,我想显示从最新余额到之前余额变化的差异...所以对于 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
您正在比较您的帐号和余额,这不是您想要的。 与上次余额比较:
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];