我一直绞尽脑汁想要如何实现以下目标,所以任何帮助都会得到很好的接受。
我有一张为医生诊所开设的会议表。使用的列是 诊所ID,会话ID,会话日期。 示例数据将是
Clinic_ID | Session_ID | Session_Date
1 | 1 | 20160114
1 | 2 | 20160121
1 | 3 | 20160128
2 | 1 | 20160114
2 | 2 | 20160128
Clinic_ID链接到Clinic表,其中存储了诊所的主要详细信息。关系是一个诊所可以举行许多会议。
我试图检索的数据适用于在Session_Date上运行20160121会话的任何诊所,但在20160128上没有运行会话。
我真的不知道从哪里开始写这个问题的查询 - 如果我太模糊或缺少信息,请告诉我,我会提供最好的信息可以。
表名是Clinic的Clinic_List和Sessions的Sessions_List。
答案 0 :(得分:0)
select distinct Clinic_ID
from Session_List
where Session_Date = '20160121'
and Clinic_ID not in
(
select Clinic_ID
from Session_List
where Session_Date = '20160128'
)
答案 1 :(得分:0)
解决此问题的一种方法是使用group by
和having
子句:
select clinic_id
from Sessions_List
group by clinic_id
having sum(case when session_date = 20150121 then 1 else 0 end) > 0 and
sum(case when session_date = 20160128 then 1 else 0 end) = 0;
我喜欢这种方法(使用having
子句),因为它对于各种条件都非常灵活。 having
子句中的每个表达式都计算给定日期的会话数。 > 0
表示会话; = 0
表示没有。