我有客户表
还有活动表
如果客户端做了一些“活动”,它会保存在活动表中。
我想收到过去三个月没有任何活动但之前有活动的客户的电子邮件。
试过了:
select Email
from Client
where NOT EXISTS (
SELECT Email
FROM Client c
LEFT JOIN Activity a on a.ClientGuid = a.ClientGuid
WHERE a.Date > DATEADD(MONTH, -3, GETDATE())
得到空结果。我错过了什么?
答案 0 :(得分:2)
我不明白您为什么要在子查询中使用 join
—— 更不用说外部联接了。这将返回过去三个月内没有活动的客户的电子邮件:
select c.Email
from Client c
where not exists (select 1
from Activity a
where a.ClientGuid = a.ClientGuid and
a.Date > DATEADD(MONTH, -3, GETDATE())
);
但是,这也会返回根本没有任何活动的客户。所以,你似乎想要:
select c.Email
from Client c
where (select max(a.date)
from Activity a
where a.ClientGuid = a.ClientGuid
) <= DATEADD(MONTH, -3, GETDATE());
如果没有活动,则子查询返回 NULL
并过滤掉客户端。