【问题标题】:Get free time slots of an employee during scheduling in sql在sql调度期间获取员工的空闲时间段
【发布时间】:2018-07-23 14:54:10
【问题描述】:

我有一组员工和一组时间段。例如

Employees

EMP1
EMP2
EMP3
EMP4
EMP5  

Time Slots

08:00AM-10:00AM
10:00AM-12:00PM
04:00PM-06:00PM
08:00AM-12:00PM
02:00PM-06:00PM
08:00AM-04:00PM
09:00AM-01:00PM
08:30AM-01:30PM
12:00PM-04:00PM
 2:00PM-3:00PM

可以将员工分配到任何时间段。我需要的是,如果在上午 8:00-下午 12:00 的时间段分配了员工,那么该员工不应该在上午 8:00-上午 10:00 和上午 10:00-下午 12:00 的时间段中可用。同样,如果员工在下午 04:00-06:00 分配,则该员工不应该在下午 4:00-06:00 之间的任何时间段可用,但可以在时间段之前和之后可用,而不是介于两者之间。

如何做到这一点?

【问题讨论】:

  • 您需要有关数据库架构的帮助吗?还是使用获取数据的查询?
  • 你有一个糟糕的问题历史。未封闭的问题。重复的问题。很明显,您要么不会回到这个问题,要么根本不理解那个答案
  • 您使用的是哪个DBMS product? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ...
  • 如果你想要的只是一个查询,我们需要知道数据是如何存储的。员工和时间段如何关联?表是什么样的?您可以在给定的时间段内拥有超过一名员工吗?
  • 您能否将您的表格 DDL 与具有预期结果的示例数据一起发布?

标签: sql sql-server


【解决方案1】:

我假设您有一个映射员工和时间段的桥接表。我可以通过我开发的以下架构开发解决方案

SELECT * INTO dbo.Employees FROM (
SELECT 1 empid,'EMP1' emp
union
SELECT 2,'EMP2'
UNION
SELECT 3,'EMP3'
UNION
SELECT 4,'EMP4'
UNION
SELECT 5,'EMP5' )a

SELECT * INTO dbo.TimeSlots FROM (
SELECT 1 sltid,'08:00AM-10:00AM' slt
UNION
SELECT 2,'10:00AM-12:00PM'
UNION
SELECT 3,'04:00PM-06:00PM'
UNION
SELECT 4,'08:00AM-12:00PM'
UNION
SELECT 5,'02:00PM-06:00PM'
UNION
SELECT 6,'08:00AM-04:00PM'
UNION
SELECT 7,'09:00AM-01:00PM'
UNION
SELECT 8,'08:30AM-01:30PM'
UNION
SELECT 9,'12:00PM-04:00PM'
UNION
SELECT 10,'2:00PM-3:00PM')a


SELECT * INTO dbo.TimeSlotsemp FROM (
SELECT 1 emp,2 slt
UNION
SELECT 1,3
UNION 
SELECT 2,6)a

--available slots
SELECT DISTINCT a.empid,a.emp,d.slt AS availableslots FROM employees a
cross JOIN timeslots d
LEFT JOIN TimeSlotsemp b ON a.empid = b.emp
left JOIN timeslots c
ON b.slt = c.sltid
WHERE (d.sltid NOT IN (SELECT slt FROM timeslotsemp WHERE emp = a.empid) or a.empid NOT IN (SELECT emp FROM timeslotsemp))

【讨论】:

    猜你喜欢
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多