如何创建查询以选择不在日期范围内的员工

时间:2017-05-18 14:11:08

标签: sql sql-server

我为SQL SERver 2008中的员工准备了这张桌子,他们正在度假:

ID   Name  VacationStart   VacationEnd
---------------------------------------
01   A     05/12/17      05/14/17
01   A     05/18/17      05/22/17
02   B     04/28/17      05/02/17
02   B     05/19/17      05/21/17
03   C     04/16/17      04/18/17

我喜欢选择工作场所的所有员工

<05>在'05 / 13/17'和'05 / 20/17'之间(日期范围:13,14,15,16,17,18,19,20),然后

输出将是:     C '04 / 19/17'和'05 / 02/17'之间 输出将是:     A和     C 如何创建这样的查询? 换一种说法: 如何创建查询以选择不在日期范围内的员工?

有没有办法创建此查询以比较不使用Tally或Dates表的表中不存在的日期范围?

PS:我不使用Tally或Dates表。

感谢。

2 个答案:

答案 0 :(得分:1)

我认为这需要在时间范围内首先找到所有度假的员工,然后获取不在该列表中的员工列表。

select distinct Name from Employees
where Name NOT IN 
 (select Name from Employees
  where VacationStart <= '05/20/17'
     AND VacationEnd >= '05/13/17') IsOnVacation

答案 1 :(得分:0)

这是一个非常好的例子,其中PostgreSQL日期范围字段和重叠运算符将非常方便。 :d

https://wiki.postgresql.org/images/7/73/Range-types-pgopen-2012.pdf

否则,你会参加一些非常有趣的SQL杂技。