我正在尝试从交易表中获得总借记,总信用和当天的可用余额。
到目前为止我已尝试过这个......
SELECT
sum(credit),
sum(debit),
sum(credit) - sum(debit) as remaining_balance
FROM transactions
WHERE user_id = 2
group by created_at;
它没有给出正确的结果。
SQL FIDDLE ....
http://sqlfiddle.com/#!2/25a27/2
我希望得到像银行/ paypal声明这样的结果,例如......
Date - Debit - Credit - Balance
05/11 - 2.20 - - 7.3
05/10 - - 1.5 - 9.5
05/06 - - 2.5 - 8
05/05 - - 5.5 - 5.5
我正在使用laravel雄辩的orm,所以如果它可能由ORM对我来说是很好的建议。感谢
答案 0 :(得分:0)
您的 GROUP BY
位置错误
按天分组是这样的:
SELECT
user_id,
sum(credit),
sum(debit),
sum(credit) - sum(debit) as remaining_balance,
txn_description,
DAY(created_at)
FROM transactions
WHERE user_id = 2
GROUP BY DAY(created_at);
DateTime文档
提供了更多功能答案 1 :(得分:0)
您可以使用相当简单的JOIN来解决它;
SELECT DATE(a.created_at) date, a.debit, a.credit,
SUM(b.credit - b.debit) balance
FROM transactions a
LEFT JOIN transactions b
ON DATE(a.created_at) >= DATE(b.created_at)
GROUP BY DATE(created_at)
ORDER BY DATE(created_at) DESC
这里的问题是JOIN条件和GROUP BY条件使用在字段上计算的值而不是使用字段本身。这将限制索引的使用,并使查询对于大量数据来说非常慢。
解决方案是添加一个单独的DATE字段,该字段保存事务的日期。这将允许JOIN / GROUP BY直接在字段上工作,并且它可以更有效地使用索引。