MYSQL中按类别分组的每个财政年度的期初余额和期末余额之和
我用了三天的时间试图解决这个问题,但都没有成功。我也在这个论坛上做了一些搜索,但也失败了。MYSQL中按类别分组的每个财政年度的期初余额和期末余额之和,mysql,sql,Mysql,Sql,我用了三天的时间试图解决这个问题,但都没有成功。我也在这个论坛上做了一些搜索,但也失败了。 这可能看起来像是重复的问题,但老实说,这与其他问题不同。 我的问题是如何获得每个财政年度的结存结转C/F和期末余额的总和,并根据每个日期范围(即财政年度)的贷款id进行分组? 上面的表模式和它的数据有我也读过这个线程,它只适用于单个用户 到目前为止,我已经尝试: SELECT loan_id, SUM(credit)-(SELECT SUM(a.debit) FROM transaction_t a
这可能看起来像是重复的问题,但老实说,这与其他问题不同。
我的问题是如何获得每个财政年度的结存结转C/F和期末余额的总和,并根据每个日期范围(即财政年度)的贷款id进行分组?
上面的表模式和它的数据有
我也读过这个线程,它只适用于单个用户 到目前为止,我已经尝试:
SELECT loan_id,
SUM(credit)-(SELECT SUM(a.debit) FROM transaction_t a
WHERE a.transaction_date
BETWEEN '2019-01-01' AND '2020-12-31' AND a.loan_id = loan_id) AS OpeningBalance,
sum(credit),sum(debit),
(@OpeningBalance+SUM(credit))-SUM(debit) AS closing_balance
FROM transaction_t tr
WHERE transaction_date BETWEEN DATE('2019-01-01') AND DATE('2020-12-31')
GROUP BY loan_id
但是上面没有给出正确的结果,我如何得到这些结果?A:查询2017-01-01和2018-12-31之间的日期
loan_id opening_balance sum(credit_amount) sum(debit_amount) closing_balance
1 0 13,000.00 6,400.00 6,600.00
2 0 2,200.00 2,500.00 -300
loan_id opening_balance sum(credit_amount) sum(debit_amount) closing_balance
1 6,600 100.00 200.00 6,500.00
2 -300 1,800.00 500.00 1,000
B:查询2019-01-01和2020-12-31之间的日期
loan_id opening_balance sum(credit_amount) sum(debit_amount) closing_balance
1 0 13,000.00 6,400.00 6,600.00
2 0 2,200.00 2,500.00 -300
loan_id opening_balance sum(credit_amount) sum(debit_amount) closing_balance
1 6,600 100.00 200.00 6,500.00
2 -300 1,800.00 500.00 1,000
您正在寻找条件聚合 关键是您需要从历史记录的开始扫描表,以便生成初始余额。然后您只需要调整条件和: 考虑:
SET @start_date = '2017-01-01';
SET @end_date = '2018-12-31';
SELECT
loan_id,
SUM(CASE WHEN transaction_date < @start_date THEN credit - debit ELSE 0 END) opening_balance,
SUM(CASE WHEN transaction_date BETWEEN @start_date AND @end_date THEN credit ELSE 0 END) sum_credit,
SUM(CASE WHEN transaction_date BETWEEN @start_date AND @end_date THEN debit ELSE 0 END) sum_debit,
SUM(CASE WHEN transaction_date <= @end_date THEN credit - debit ELSE 0 END) closing_balance
FROM transaction_t
WHERE transaction_date <= @end_date
GROUP BY loan_id
以及:
NB:这是一个问得很好的问题,所以我们可以使用更多的
loan_id opening_balance sum_credit sum_debit closing_balance
1 6600 100 200 6500
2 -300 1800 500 1000