sql - 从查询中获取空结果
问题描述
我有客户表
- ClientGuid 电子邮件 电话
还有活动表
- ActivityTitle 日期 ClientGuid
如果客户端做了一些“活动”,它会保存在活动表中。
我想获取最近三个月没有任何活动并且之前有活动的客户的电子邮件。
试过这个:
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())
得到空的结果。我错过了什么?
解决方案
我不明白您为什么要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
并过滤掉客户端。
推荐阅读
- c - 函数“rand_r”的隐式声明
- javascript - Discord.js 石头剪刀布命令不做任何事情,即使没有明显的错误
- rest - 使用 Twilio 发送 SMS 时出现 TwilioRestException
- c - 获得用户输入后,最后一个 printf() 根本不打印
- python - 转移数据组
- codeigniter - Codeigniter PHPMailer 如何使用输入字段获取地址和邮件内容?
- android - Android:通过 android >=11 中的反射访问非 sdk(制造商提供的库)API
- netsuite - SuiteScript - 从“供应商”中搜索加入“术语”
- reactjs - 如何在 Create React App SPA 中选择性地呈现代码?
- c++ - 如何使用 ifstream 获取文件中的最新更改?