ORACLE SQL查询仅重叠时间范围

ORACLE SQL查询仅重叠时间范围,sql,oracle,overlapping,date-range,Sql,Oracle,Overlapping,Date Range,Emp表中的数据: 预期结果: 仅每个部门分组的重叠时间范围 ==>例如,在销售中,三分之二的记录重叠 NUM DEPT HIRED_SDT HIRED_EDT --- ----- ------------------------------ ------------------------------ 1 Sales October, 01 2012 11:00:00+0000 October, 01 2012 11:30:00

Emp表中的数据:

预期结果:

仅每个部门分组的重叠时间范围

==>例如,在销售中,三分之二的记录重叠

NUM  DEPT   HIRED_SDT                       HIRED_EDT
---  -----  ------------------------------  ------------------------------
1    Sales  October, 01 2012 11:00:00+0000  October, 01 2012 11:30:00+0000
2    Sales  October, 01 2012 11:22:00+0000  October, 01 2012 12:40:00+0000
5    CC     October, 01 2012 15:00:00+0000  October, 01 2012 16:10:00+0000
6    CC     October, 01 2012 16:00:00+0000  October, 01 2012 17:20:00+0000
您可以为此尝试使用EXISTS:

SELECT *
FROM Emp e
WHERE EXISTS (
  SELECT *
  FROM Emp
  WHERE DEPT = e.DEPT
    AND HIRED_SDT < e.HIRED_EDT
    AND HIRED_EDT > e.HIRED_sDT
    AND NUM <> e.NUM
);

例如,如果存在属于同一部门的另一行且其范围与此行重叠,请选择一行。

看起来您忘记了exists子句中的和num e.num,否则将返回所有行。谢谢!这就是我要找的!为什么十月11:22和十月12:40是重叠的,而13:00和13:50不是重叠的?什么是重叠?@Art:我相信,雇用的SDT有开始日期和雇用的EDT结束日期。第1行和第2行中的范围重叠,因为第二行从第一行的SDT和EDT之间开始。@Andriy M-谢谢Andriy,我仍然不明白,但还可以。在上面的例子中,我看到78分钟的时间差是重叠的,但50分钟的时间差不是。。。也许我错过了什么。。。像往常一样做白日梦。。。哈哈@Art:我想我能看到你的困惑。这是关于相互重叠的范围。范围3和范围4不会与各自部门中的任何其他范围重叠,因此不应返回。
SELECT *
FROM Emp e
WHERE EXISTS (
  SELECT *
  FROM Emp
  WHERE DEPT = e.DEPT
    AND HIRED_SDT < e.HIRED_EDT
    AND HIRED_EDT > e.HIRED_sDT
    AND NUM <> e.NUM
);