嗨我有2张桌子:
客户
发票
我想找到过去6个月内没有按月向我购买的所有客户。这就是我现在所拥有的:
SELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM invoices WHERE invoices.customerid = customers.customerid AND month(invoices.fdate) = '2')
它继续运行10分钟,但仍然没有结果。我在想,即使我的语法有效,我也必须每月进行一次,然后手动将其从客户表中删除。
有更好的解决方案吗?所有帮助赞赏。感谢
答案 0 :(得分:0)
您的查询并不是您想要的。正确措辞的人可能会更好地工作:
SELECT c.*
FROM customers c
WHERE NOT EXISTS (SELECT 1
FROM invoices i
WHERE i.customerid = c.customerid AND
i.fdate >= CURDATE() - interval 6 month
);
对于此版本,您需要invoices(customerid, fdate)
上的索引。
您也可以尝试一下:
SELECT c.*
FROM customers c JOIN
(SELECT customerid, MAX(fdate) as max_fdate
FROM invoices i
GROUP BY customerid
) i
ON i.customerid = c.customerid
WHERE i.max_fdate < CURDATE() - interval 6 month;