You might like to take a look at Balances.zip in my public databases folder at:
https://onedrive.live.com/?cid=44CC60D7FEA42912&id=44CC60D7FEA42912!169
This little demo file includes examples which cater for duplicate transaction dates. To act as a tie breaker the table must include a TransactionID or similar column (usually an autonumber) as its primary key. The appropriate query in the demo is:
SELECT T1.[CustomerID], T1.TransactionDate, T1.Credit, T1.Debit,
SUM(T2.Credit-T2.Debit) AS Balance
FROM TransactionsCD AS T1 INNER JOIN TransactionsCD AS T2
ON (T2.TransactionID<=T1.TransactionID OR T2.TransactionDate<>T1.TransactionDate)
AND (T2.TransactionDate<=T1.TransactionDate)
GROUP BY T1.[CustomerID], T1.TransactionDate, T1.TransactionID, T1.Credit, T1.Debit
ORDER BY T1.TransactionDate DESC , T1.TransactionID DESC;
The above query is ordered by transaction date and ID order in descending order, but will work equally well in ascending date and ID order.