如何编写Oracle查询以查找可能重叠的from-to日期的总长度

Rob*_*oby 10 sql oracle

我很难找到以下任务的查询

我有以下数据,想要查找每个唯一ID的总网络日

ID  From        To          NetworkDay
1   03-Sep-12   07-Sep-12   5
1   03-Sep-12   04-Sep-12   2
1   05-Sep-12   06-Sep-12   2
1   06-Sep-12   12-Sep-12   5
1   31-Aug-12   04-Sep-12   3
2   04-Sep-12   06-Sep-12   3
2   11-Sep-12   13-Sep-12   3
2   05-Sep-12   08-Sep-12   3
Run Code Online (Sandbox Code Playgroud)

问题是日期范围可能重叠,我无法想出能给我以下结果的SQL

ID  From        To          NetworkDay
1   31-Aug-12   12-Sep-12   9
2   04-Sep-12   08-Sep-12   4
2   11-Sep-12   13-Sep-12   3
Run Code Online (Sandbox Code Playgroud)

然后

ID  Total Network Day
1   9
2   7
Run Code Online (Sandbox Code Playgroud)

如果无法进行网络日计算,只需到第二个表即可.

希望我的问题很明确

小智 0

如何构建一个 SQL,通过删除漏洞并仅考虑最大间隔来合并间隔。它是这样的(未测试):

SELECT DISTINCT F.ID, F.From, L.To
 FROM Temp AS F, Temp AS L
 WHERE F.From < L.To AND F.ID = L.ID
   AND NOT EXISTS (SELECT *
                 FROM Temp AS T
                 WHERE T.ID = F.ID
                 AND F.From < T.From AND T.From < L.To
                         AND NOT EXISTS ( SELECT *
                         FROM Temp AS T1
                            WHERE T1.ID = F.ID
                            AND T1.From < T.From
                            AND T.From <= T1.To)
               )
   AND NOT EXISTS (SELECT *
              FROM Temp AS T2
              WHERE T2.ID = F.ID
              AND (
                    (T2.From < F.From AND F.From <= T2.To)
                 OR (T2.From < L.To AND L.To < T2.To)
                   )
             )
Run Code Online (Sandbox Code Playgroud)