过去6周内未创建发票的客户端,MySQL

过去6周内未创建发票的客户端,MySQL,mysql,client,datediff,invoice,maxdate,Mysql,Client,Datediff,Invoice,Maxdate,我很难列出过去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 invoi

我很难列出过去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;
但它返回一个空集。
如果有任何帮助,我们将不胜感激。

从发票开始加入意味着没有发票的客户将被排除在外。您可以从客户端开始并加入到发票中,以在select中获取所需的信息,然后使用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;

嗨,吉姆!让我们假设所有客户都有发票,因为他们实际上有发票。每张发票都单独保存,并有自己的日期。正如您所建议的,该查询还返回过去42天内有发票的客户,这是我不希望看到的。我认为问题出在EXIST中,因为datediff curdate没有考虑最新的创建日期,i2.created_date>42我想要像maxi2.created_date这样的东西,但这当然是不允许的。有什么想法吗?@ErindPepi没有必要在exists中输入最大值,因为如果在过去42天内有任何匹配的发票,则该条件将为false。我将使用一个sql FIDLE来显示正在使用的查询。@ErindPepi datediff部分似乎有问题,所以我改变了这一点。示例可用。