员工可在某个日期范围内完成任务
Employee available for task between a date range
我一直在做一个员工工作管理项目,我有点卡住了。我有 3 tables:
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
我不确定如何查询 table 以查看谁可以在日期范围内执行任务(分配给同一任务的多个用户)。我有一个查询,我会在这里:
所以如果你休假 table 如果等式只是 运行 下面的查询
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
如您所见,Mark 在该日期(在任务 table 中)不可用。
我想查询假期 table 先看看他们是否在假期 然后任务 table 查看他们是否已经在日期范围内有任务 然后显示结果我怎么可以完成任务。
我目前无法测试,但请尝试:
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
)
)
这将检查指定的开始日期是否不在分配任务的开始或结束日期之间,以及指定的结束日期是否不在分配任务的开始或结束日期之间,然后执行假期也一样。
您好,我现在没有合适的测试工具,但您可以尝试这样做:
使用日期比较时:
尝试 convert/cast DATE(确保不包括时间)以确保结果正确。
据我所知,在开始日期和结束日期之间使用时也包括在内(可能在某些 RDMS 功能中)
也包括假期,你可以这样做(或者):
- 首先加入假期 table 然后根据结果再次加入分配的任务 table。
或
- 首先加入分配的任务 table 然后根据结果再次加入假期 table
抱歉没有包含代码,因为我没有时间设置。
我一直在做一个员工工作管理项目,我有点卡住了。我有 3 tables:
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
我不确定如何查询 table 以查看谁可以在日期范围内执行任务(分配给同一任务的多个用户)。我有一个查询,我会在这里:
所以如果你休假 table 如果等式只是 运行 下面的查询
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
如您所见,Mark 在该日期(在任务 table 中)不可用。
我想查询假期 table 先看看他们是否在假期 然后任务 table 查看他们是否已经在日期范围内有任务 然后显示结果我怎么可以完成任务。
我目前无法测试,但请尝试:
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
)
)
这将检查指定的开始日期是否不在分配任务的开始或结束日期之间,以及指定的结束日期是否不在分配任务的开始或结束日期之间,然后执行假期也一样。
您好,我现在没有合适的测试工具,但您可以尝试这样做:
使用日期比较时:
尝试 convert/cast DATE(确保不包括时间)以确保结果正确。
据我所知,在开始日期和结束日期之间使用时也包括在内(可能在某些 RDMS 功能中)
也包括假期,你可以这样做(或者):
- 首先加入假期 table 然后根据结果再次加入分配的任务 table。
或
- 首先加入分配的任务 table 然后根据结果再次加入假期 table
抱歉没有包含代码,因为我没有时间设置。