我觉得有一种方法可以使用条件 Cases 或 Ifs 来做到这一点,但我就是想不通。
下面的查询将三个表连接在一起,如果所有三个表都返回行,则效果很好。但是,在某些情况下,campaign_groups 和 new_advertisers 中存在记录,但 payment_transactions 中没有记录。
由于 WHERE 子句确保 payment_transactions.transaction_date >=campaign_groups.date_created,零交易的行被排除在外。
有没有办法仅在 LEFT JOIN 返回行时应用 WHERE 子句?
SELECT sum(payment_transactions.transaction_amount) as payment,
new_advertisers.account_id,
new_advertisers.advertiser_id,
max(payment_transactions.transaction_date) as last_payment,
campaign_groups.id,
campaign_groups.date_created,
TIMESTAMPDIFF(DAY, max(payment_transactions.transaction_date), NOW()) as days_passed
FROM campaign_groups
INNER JOIN new_advertisers ON campaign_groups.advertiser_id = new_advertisers.advertiser_id
LEFT JOIN payment_transactions ON payment_transactions.account_id = new_advertisers.account_id
WHERE payment_transactions.transaction_date >= campaign_groups.date_created
AND campaign_groups.weekly_budget_cents > 0
ORDER BY days_passed DESC