获得有条件的重叠时间范围

时间:2011-10-28 03:33:12

标签: java sql database hibernate

我正在尝试制作任务调度程序,但遇到了一个不知道该做什么或如何解决的问题:S

我会尽力解释。 给出如下表格:

key | start |  end  | employee(fk) 
 1    6:00    8:00     A               
 2    9:00    11:00    B
 3    7:00    9:00     B
 4    7:00    11:00    C

in image

我想要找到的是,给定一组N名员工,将给予员工所有重叠的时间范围。这就像得到“和谐”的员工一样。 (或换句话说:获得所有给定员工工作的所有时间范围)

示例:

given {A,B}   returns 2 columns 7:00  |  8:00  time range which overlaped by A and B
given {B,C}  returns  2 columns 9:00  |  11:00  time range which overlaped by B and C

我一直在思考3天,但仍然不太明白该做什么......有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

由于您的粒度足够粗糙,您可以采用30分钟的步骤,并检查每个员工是否真的很忙。

您可以保留一组布尔值,每个员工一个布尔值,告诉该员工当前是否忙碌。

然后你采取30分钟的步骤(让我们假设从早上6点开始):

  1. 你检查谁在上午6点开始他们的活动,因为你设置的每个开始活动都是相应的标志
  2. 如果所有标志都设置为true,那么这里有一个起始重叠范围,否则,如果有重叠范围,请将其停止
  3. 将时间增加30分钟
  4. 对于员工的每个开始活动,将其标志设置为true
  5. 对于员工的每个结束活动,将其标志设置为false
  6. 返回第2步

答案 1 :(得分:0)

看看这是否在伪SQL中解决了它(我使用我公司的自制数据库,所以使用我们的SQL语法)。假设表名为“表”:

SELECT T1.employee, T2.employee, T1.start, T2.end 
FROM Table T1, Table T2 
WHERE T1.key!=T2.key AND T1.employee!=T2.employee 
      AND T1.start <= T2.end AND T1.start >= T2.start