我为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表。
感谢。
答案 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杂技。