我不知道该怎么称呼它,我试图解释它。
我有两张桌子:
1。构件
2。 share_trx_history
一个成员可以拥有多个共享记录,我必须在以下结构中显示它 (总借记,贷方,给定年度的余额开放)
+-----------+------+-------+--------+---------+--------+
|account_no | name | debit | credit | balance | opening|
+-----------+------+-------+--------+---------+--------+
我试过这个但是失败了:
SELECT m.account_no, m.name, share.*
FROM `member` AS m
INNER JOIN (
SELECT sth.account_no AS sth_account_no, SUM(sth.debit) AS sth_debit, SUM(sth.credit) AS sth_credit,(
SELECT sth2.balance
FROM `share_trx_history` AS sth2
WHERE sth2.account_no=m.account_no
ORDER BY sth2.share_issue_date ASC
LIMIT 0,1
) AS sth_balance,
(SELECT balance
FROM `share_trx_history` AS sth3
WHERE year(sth3.share_issue_date ) <2014 AND sth3.account_no=m.account_no
ORDER BY sth3.share_issue_date DESC
LIMIT 0 , 1) AS sth_opening
FROM `share_trx_history` AS sth
WHERE sth.share_issue_date >= DATE_SUB(NOW(), INTERVAL 1 Year)
AND sth.account_no=m.account_no) AS share
ON share.sth_account_no = m.account_no
给出以下错误:
Unknown column 'm.account_no' in 'where clause'
有没有简单的方法来完成它?
我的查询有什么问题?
谢谢
更新
balance = (total debit + total dividend) - (total credit)
请检查opening = previous year balance
答案 0 :(得分:1)
试试这个:
SELECT m.account_no, m.name, SUM(sth.debit) AS sth_debit, SUM(sth.credit) AS sth_credit,
MAX(CASE share_issue_date WHEN start_date THEN balance ELSE 0 END) AS sth_balance,
MAX(CASE share_issue_date WHEN opening_date THEN balance ELSE 0 END) AS sth_opening
FROM `member` AS m
INNER JOIN share_trx_history AS sth ON m.account_no = sth.account_no
INNER JOIN (SELECT account_no, MIN(share_issue_date) start_date, MAX(share_issue_date) opening_date
FROM share_trx_history WHERE YEAR(share_issue_date) <2014 GROUP BY account_no
) AS A ON sth.account_no = A.account_no AND share_issue_date IN (start_date, opening_date)
WHERE sth.share_issue_date >= DATE_SUB(NOW(), INTERVAL 1 YEAR)
GROUP BY m.account_no