mysql - 过去 6 周内没有创建发票的客户,MySQL

标签 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 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;

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

最佳答案

从发票开始加入意味着立即排除任何没有发票的客户。您可以从客户开始,加入发票以获取选择中所需的信息,然后使用 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;

关于mysql - 过去 6 周内没有创建发票的客户,MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21185221/

相关文章:

php - 什么是队列访问并发解决方案?

C# TCP 客户端到服务器消息

Python:月内 2 个日期时间的差异

Mysql时间戳默认值

mysql - 模型的关系 (Laravel 5.2)

mysql - MySQL 中的 IF 语句

c++ - 如何为多个客户端连接实现服务器等待循环

rest - 线程 "main"java.lang.NoClassDefFoundError : com/sun/jersey/api/client/config/ClientConfig RestFul 中的异常

mysql - MySQL 查询中的 DATEDIFF

sql - 获取上个月所有记录的最佳方式