0

我很难列出过去 6 周内没有为其创建发票的所有客户。涉及两个表,客户和发票。我当前的查询如下所示:

select MAX(invoice.created_date) 'Last Invoice Date', invoice.invoice_no 'Invoice No.', DATEDIFF(curdate(), max(invoice.created_date)) 'Days since last invoice created', client.name 'Client'  
from invoice 
left join
client on invoice.client_id = client.id 
where 
datediff (curdate(), (select MAX(invoice.created_date) from invoice left join client on invoice.client_id = client.id)) >  42
group by client.id;

但它返回一个空集。任何帮助,将不胜感激

4

1 回答 1

0

从发票开始加入意味着立即排除任何没有发票的客户。您可以从客户开始并加入发票以在选择中获取您需要的信息,然后使用EXISTS子句仅获取最近 x 天内没有发票的客户:

SELECT MAX(invoice.created_date) 'Last Invoice Date', invoice.invoice_no 'Invoice No.', DATEDIFF(curdate(), max(invoice.created_date)) 'Days since last invoice created', client.name 'Client'  
FROM client c
LEFT JOIN invoice i ON (i.client_id = c.id)
WHERE NOT EXISTS(
    SELECT 1 FROM invoice i2
    WHERE i2.client_id = c.id
    AND DATE_SUB(NOW(), INTERVAL 42 DAY) < i2.created_date
)
GROUP BY c.id;
于 2014-01-17T11:55:33.323 回答