我有两张桌子,invoices
和deposits
。
它们看起来有点像这样:
发票
id | paymentType | grossTotal | dateTime
1 | Cash | 1000 | UNIX TIME
2 | Card | 1350 | UNIX TIME
3 | Card | 1250 | UNIX TIME
4 | Card | 750 | UNIX TIME
存款
id | paymentType | invNo | dateTime | amount
1 | Cash | 1 | UNIX TIME | 150
2 | Card | 2 | UNIX TIME | 350
存款总是过去的日期,发票日期将是,例如today
,所以我想确定发票上今天支付的余额,即invoices.grossTotal - deposits.amount
,并按付款类型列出。
因此,在上面的表格示例中,发票 1 上将支付 850 英镑,发票 2 上将支付 1000 英镑,这很容易实现,每行一到两行,但是在对付款类型和存款发票进行分组时,我被卡住了...
SELECT
invoices.id,
sum(grossTotal)-IFNULL(depositsCheck.previouslyPaid,0) as todayTotal,
depositsCheck.previouslyPaid, sum(grossTotal) as grossTotal
FROM `invoices`
LEFT JOIN (SELECT SUM(amount) as previouslyPaid, invNo
FROM deposits
GROUP BY invNo) depositsCheck ON depositsCheck.invNo=invoices.id
GROUP BY invoices.paymentType ORDER BY id DESC
上面的 SQL 查询将适用于用 CASH 支付的项目,但不适用于卡支付,因为分组invoices.paymentType
意味着表中的id
列invoices
不再正确,因此JOIN
如果该行有一个id
与存款无关的列,则失败.
如何运行如上所述的查询,但确保我可以在发票的任何实例上join
的deposits
表格,按与分组列 id 记录匹配的付款类型分组?
我正在使用 mySql,所以请发布 MySql 可以做的连接!:D