首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql获取所有未在特定日期和时间预订的可用人员。

sql获取所有未在特定日期和时间预订的可用人员。
EN

Stack Overflow用户
提问于 2017-03-18 22:25:32
回答 3查看 629关注 0票数 0

我正在为SQL查询而挣扎。我正在为一个滑雪胜地建立一个预订系统,在我的数据库中,我有教练和课程。一个会话可以有一个指导员,它有一个日期、startTime和endTime。为了增加一节课,我想让所有可用的讲师在选定的时间和日期。换句话说,所有在那个日期和那个时候没有预约的老师。表例:

讲师: i1,i2,i3,i4,i5,i6,i7,i8

会议:

讲师,日期,开始,结束,结束

代码语言:javascript
复制
**i1**          **2017-05-03**        **14:30:00**      **15:30:00**
**i2**          **2017-05-03**        **14:30:00**      **15:30:00**
**i3**          **2017-10-03**        **10:30:00**      **11:30:00**
**i4**          **2017-05-03**        **10:30:00**      **11:30:00**
**i1**          **2017-11-03**        **14:30:00**      **15:30:00**

然后输入日期=‘2017-05-03’,开始=‘14:30’和结束=‘15’30‘我想得到

i3,i4,i5,i6,i7,i8

计算出我需要将join会话留给指导员,按指导员id分组,然后消除那些在组中有一个字段的id和所选的输入。但是,对于GROUP子句,我必须使用聚合函数,我不知道在这里可以应用哪一个函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-19 10:31:18

SirWinning的自我回答看起来应该有效,但我下面的版本删除了一些不需要的部分。

代码语言:javascript
复制
select * 
from instructor
where id not in 
  (select instructorid
   from Session
   where date='2017-03-19' and starttime<='15:30:00' and endtime>='14:30:00')

此代码将找到任何未预订课程的讲师,该课程与相关日期的14:30-15:30窗口重叠。

如果这是你想要的,那你就可以走了。当然,这并不意味着指导员是“真正可用的”。还有其他事情会影响他们的工作效率(工作时间、年假等),所以你需要确保有合适的事情来处理这些事情。

还要注意,这段代码将防止指导员出现在“背靠背”的预订中。如果您想让预订在14:30开始,而另一次预订在那个时候结束,则需要将<=>=更改为<>

票数 1
EN

Stack Overflow用户

发布于 2017-03-18 22:40:22

使用not exists()

代码语言:javascript
复制
select *
from instructors i
where not exists (
  select 1
  from sessions s
  where s.instructor = i.id
    and s.date  = '2017-05-03'
    and s.start = '14:30'
    and s.end   = '15:30'
    )
票数 0
EN

Stack Overflow用户

发布于 2017-03-18 23:47:29

所以我尝试了这个查询,显然它有效(至少对我的测试用例是这样)

有人能看一下并告诉我看上去是否正确吗?

代码语言:javascript
复制
select * 
from instructor
where id in
(select id
from instructor 
group by id
having id not in 
(select distinct(instructorid) from Session
where date='2017-03-19' and starttime<='15:30:00' and endtime>='14:30:00') )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42880617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档