mysql - 员工可在某个日期范围内完成任务

标签 mysql date date-range

我一直在做一个员工工作管理项目,我有点卡住了。我有 3 个表:

1:  employees

    empid,       empFirst     empLast
    1            jon          smith
    2            mark         road
    3            jane         hall
2:  holiday

    id        employee id      datestart       dateend
    1         2                2015-08-07      2015-08-12
    2         3                2015-07-4       2015-07-11
    3         2                2015-07-20      2015-07-24
3: Task Assigned

   id      taskid        assignedTo(userid)        startTask      endTask
   1       1               1                     2015-07-10      2015-07-14
   2       2               2                     2015-07-29      2015-07-29
   3       2               3                     2015-07-18      2015-07-30
   4       3               2                     2015-08-30      2015-09-03
   5       4               2                     2015-09-10      2015-09-03

I'm not sure how to go about querying the tables to see who is available for a task in a date range (multiple user assigned to the same task). I have a query which I would here:

so if you take the holiday table out if the equation and just run the query below

SELECT employees.empId, employees.empFirst, employees.empLast
FROM employees 
LEFT JOIN taskassigned 
ON employees.empId = taskassigned.assignedTo
WHERE taskassigned.assignedTo IS NULL or  
 not (taskassigned.startTask  BETWEEN '2015-07-29 14:30:00' AND '2015-07-29 18:30:00' 
   or taskassigned.endTask  BETWEEN '2015-07-29 14:30:00' AND '2015-07-29 18:30:00')

我得到的结果是:

empId  empFirst empLast
1      jon      smith   (he is available)
2      mark     road    
2      mark     road

如您所见,马克在此日期(在任务表中)不可用。

我想先查询假日表,看看他们是否在度假,然后查询任务表,看看他们是否已经有日期范围内的任务,然后结果告诉我该任务是否可用。

最佳答案

我目前无法测试,但请尝试:

SELECT employees.empId, employees.empFirst, employees.empLast
FROM employees 
LEFT JOIN taskassigned 
ON employees.empId = taskassigned.assignedTo
LEFT JOIN holiday
ON employees.empId = holiday.employeeId
WHERE (
    taskassigned.assignedTo IS NULL
    OR (
        '2015-07-29 14:30:00'  NOT BETWEEN taskassigned.startTask AND taskassigned.endTask
        AND '2015-07-29 18:30:00'  NOT BETWEEN taskassigned.startTask AND taskassigned.endTask
    )
)
AND (
    holiday.employeeId IS NULL
    OR (
        '2015-07-29 14:30:00'  NOT BETWEEN holiday.dateStart AND holiday.dateEnd
        AND '2015-07-29 18:30:00'  NOT BETWEEN holiday.dateStart AND holiday.dateEnd
    )
)

这将检查指定的开始日期是否不在分配任务的开始日期或结束日期之间,以及指定的结束日期是否不在分配任务的开始日期或结束日期之间,然后执行相同的操作假期。

关于mysql - 员工可在某个日期范围内完成任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401008/

相关文章:

mysql - 通过正则表达式匹配搜索 MySQL 数据库(反向)

mysql - 数据库设计/mysql

php - 如何解析来自 google checkout 的 XML 响应?

mysql - Win 7 - Tomcat 无法连接到 MySQL

mysql - 使用 unix 纪元存储日期和日期时间

javascript - 如何验证输入日期 html 年份?

php - 仅知道年份的日期(例如 1570-00-00)

php - 合并/合并日期范围的算法

python - 日期范围匹配函数 pandas

c# - 日期范围重叠