SQL Server 2012 を使用して実行バランスを取得しようとしています
これが私がこれまでに得たものです...
DECLARE @Transactions TABLE
(
Amount decimal (18,2),
TransactionId uniqueidentifier,
AccountId uniqueidentifier,
TransactionDate date
)
DECLARE @AccountId uniqueidentifier = NEWID()
INSERT INTO @Transactions (Amount, TransactionId, AccountId, TransactionDate)
SELECT 3224.99, NEWID(), @AccountId, '2013-06-02'
INSERT INTO @Transactions (Amount, TransactionId, AccountId, TransactionDate)
SELECT 18.99, NEWID(), NEWID(), '2013-06-14'
INSERT INTO @Transactions (Amount, TransactionId, AccountId, TransactionDate)
SELECT -8.99, NEWID(), @AccountId, '2013-06-14'
INSERT INTO @Transactions (Amount, TransactionId, AccountId, TransactionDate)
SELECT -6.99, NEWID(), @AccountId, '2013-06-14'
INSERT INTO @Transactions (Amount, TransactionId, AccountId, TransactionDate)
SELECT -22.14, NEWID(), @AccountId, '2014-11-09'
INSERT INTO @Transactions (Amount, TransactionId, AccountId, TransactionDate)
SELECT -84.99, NEWID(), @AccountId, '2013-06-09'
SELECT SUM(Amount) OVER (ORDER BY TransactionDate, TransactionId) as [RunningBalance],
Amount
FROM @Transactions
WHERE AccountId = @AccountId
ORDER BY TransactionDate DESC
結果は
RunningBalance Amount
--------------------------------------- ---------------------------------------
3101.88 -22.14
3133.01 -6.99
3124.02 -8.99
3140.00 -84.99
3224.99 3224.99
私の目標は、RunningBalance に各残高を表示させることです。同じ日であっても、各行には独自の残高が必要です。
ご覧のとおり、2 番目の行が正しく表示されません。競合する 2 番目のアカウント ID も持っているためだと思いますが、WHERE ステートメントでそれが削除されると想定していました。
ORDER BY を削除することはできますが、最後のクエリにはページングがあるため、最新のトランザクションを最初にリストしたいと考えています。
SELECT * FROM (
SELECT SUM(Amount) OVER (PARTITION BY AccountId ORDER BY TransactionDate, TransactionId) as [RunningBalance],
Amount, TransactionDate
FROM @Transactions
WHERE AccountId = @AccountId
) AS Results
ORDER BY TransactionDate DESC
RunningBalance Amount TransactionDate
--------------------------------------- --------------------------------------- ---------------
3101.88 -22.14 2014-11-09
3131.01 -8.99 2013-06-14
3124.02 -6.99 2013-06-14
3140.00 -84.99 2013-06-09
3224.99 3224.99 2013-06-02
何が問題なのかよくわかりません...