ORACLE SQL查询仅重叠时间范围
Emp表中的数据: 预期结果: 仅每个部门分组的重叠时间范围 ==>例如,在销售中,三分之二的记录重叠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
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
);