2015-09-06 71 views
-2

任何人都可以幫助我計算帳戶餘額信息的某個歷史表的最後更改值。用於計算金額變化的SQL查詢

它像下面的記錄:

accountid  balanceAmount  InsertDate 
---------------------------------------------- 
7282991   200    9/6/2015 0:00 
7282991   200    9/5/2015 0:00 
7282991   100    9/4/2015 0:00 
7282991   100    9/3/2015 0:00 
7282991   100    9/2/2015 0:00 
929999911  500    9/6/2015 0:00 
929999911  500    9/5/2015 0:00 
929999911  400    9/4/2015 0:00 
929999911  200    9/3/2015 0:00 

我需要輸出像

accountid   lastChange 
----------------------------- 
7282991    100 
929999911   100 
+0

你是指最後一次改變價值是什麼意思? – Harsh

+0

如果您看到上面的例子,餘額金額爲7282991在9/5/2015從100到200變更。所以最近的餘額變化爲:200 - 100 = 100。同樣爲929999911 – ChupChapCharli

+0

嘗試更具體,也包括你已經嘗試過的代碼..它會更容易幫助你... – TFrost

回答

0

準備數據

create table #records(accountid varchar(100),balanceamount int,insertdate datetime) 

insert into #records values 
('7282991',200,'9/6/2015'), 
('7282991',200,'9/5/2015'), 
('7282991',100,'9/4/2015'), 
('7282991',100,'9/3/2015'), 
('7282991',100,'9/2/2015'), 
('929999911',500,'9/6/2015'), 
('929999911',500,'9/5/2015'), 
('929999911',400,'9/4/2015'), 
('929999911',200,'9/3/2015') 

查詢

with cte1 as 
(
SELECT accountid,balanceamount,insertdate, 
balanceamount-LEAD(balanceamount) OVER (partition by accountid ORDER BY insertdate desc) as change 
FROM #records 
), 
cte2 as 
(
    select ROW_NUMBER() over(partition by accountid ORDER BY insertdate desc) as rn, * from cte1 where change<>0 
) 

select accountid,change from cte2 where rn=1 
+0

感謝您的及時回覆。它工作正常:-) – ChupChapCharli

+0

@ChupChapCharli:歡迎! – DarkKnight