sql - 员工排类系统

标签 sql database postgresql

我有员工表,我试图只查询时间戳范围内可用的员工。

select 
    emp_fn_name, emp_fn_name,
    TO_TIMESTAMP(e.start_time, 'HH12:MIAM,PM')::TIME,
    TO_TIMESTAMP(e.end_time, 'HH12:MIAM,PM')::TIME
from 
    employees e
inner join 
    schedule s on emp_id = e.id
where 
    TO_TIMESTAMP(s.start_time, 'HH12:MIAM,PM')::TIME
        not BETWEEN TO_TIMESTAMP('2:00PM', 'HH12:MIAM,PM')::TIME
                AND TO_TIMESTAMP('03:00PM', 'HH12:MIAM,PM')::TIME

时间表的示例数据:

start   end     days    emp_id  emp_fn
2:00    3:00PM  TuTh    38      e1
2:00    3:00PM  TuTh    154     e2
4:00    5:00AM  TuTh    154     e3
6:00    7:00AM    MW    154     e1
7:00    8:00AM    MW    154     e4

如果我要找人在下午 2:00 到 3:00 为 TuTh 工作,我应该找 emp3 和 emp4,因为他们在指定的时间范围内不忙。

谢谢。

最佳答案

我想你想要:

select emp_fn_name, emp_fn_name
from employees e 
where not exists (select 1
                  from schedule s
                  where s.emp_id = e.id and
                        s.start < '03:00PM'::time and
                        s.end > '02:00PM'::time
                 );

关于sql - 员工排类系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55133206/

相关文章:

sql - Oracle:从systables/information_schema中查找索引创建日期吗?

java - 是否可以一次性将一组对象插入 DynamoDB - Java

postgresql - 为postgres中的每个用户选择最后一个项目

php - 在一个查询中将值插入多行

php - 从类的公共(public)函数中检索 mysql 字段的值

sql - 创建更新过程时出错

sql - 为什么 SELECT COUNT(1 +'A' ) 在 SQL Server 中返回 1

mysql - 将 mysql 数据库转换为 Oracle

mongodb - 在 Mongodb 中,如何检查所有文档的值是否都是唯一的?

sql - union 在 PostgreSQL 中没有按预期工作