ユーザーID、日付時刻、トランザクションタイプ、および値を記録するユーザーのテーブルにトランザクションのリストがあります。 TransactionIDは、主キーの自動インクリメント1です。TransactionTypeは、すべての値がテーブル内で正の値になるように、Deposit(1)またはWithdrawal(2)を定義します。私は、実行中の合計で口座の記述を作成しようとしています。トランザクションからの勘定勘定SQL
TransactionID UserID DateTime TransactionTypeID Value
1 3112 01-04-2016 12:00 1 5.00
3 3112 01-04-2016 13:00 2 2.00
5 3112 01-04-2016 13:25 2 1.00
8 3112 02-04-2016 12:00 1 10.00
9 3112 02-04-2016 12:35 2 4.00
基本的に私が作成するために合計値を持つアカウントのクエリの実行中の文を作成したい:
DateTime TransactionTypeID Deposit Withdrawal Balance
01-04-2016 12:00 1 5.00 5.00
01-04-2016 13:00 2 2.00 3.00
01-04-2016 13:25 2 1.00 2.00
02-04-2016 12:00 1 10.00 12.00
02-04-2016 12:35 2 4.00 8.00
私はOUTERは、前のトランザクションを選択するために、APPLYを使用してみましたが、ノーシングルに勝つとしていますクエリ。任意の支援が評価されます
SELECT
[UserID], [DateTime],
T.[Value] *
(CASE
WHEN [TransactionTypeID] IN (1, -- deposit
2 -- withdrawal
)
THEN -1
ELSE 1
END),
T2.Value AS PrevValue
FROM
[Transaction] T
OUTER APPLY
(SELECT TOP 1 T2.[Value]
FROM [Transaction] T2
WHERE UserID = 3112
AND T2.[TransactionID] > T.TransactionID
ORDER BY T2.TransactionID) AS T2
WHERE
T.[UserID] = 3112
ORDER BY
T.[TransactionID] DESC
このクエリの出力はOPの基準を満たしていません。入金か退出かにかかわらずすべての値を単純に差し引きます – JamieD77