如何总结时间,不包括与 Oracle 中给定的开始日期时间和结束日期时间重叠的时间

How to sum up the time excluding the overlapping time with given start datetime and end datetime in Oracle

数据如下

+----+-------------------+-------------------+
|KEY |START_DTT          |END_DTT            |
+----+-------------------+-------------------+
|KEY1|2020-11-24 00:00:00|2020-11-24 00:10:00|
|KEY1|2020-11-24 00:00:00|2020-11-24 00:20:00|
|KEY1|2020-11-24 00:10:00|2020-11-24 00:30:00|
|KEY1|2020-11-24 00:20:00|2020-11-24 00:50:00|
|KEY1|2020-11-24 00:55:00|2020-11-24 01:00:00|
+----+-------------------+-------------------+

我想要得到的是在 Oracle 中不包括重叠时间的总和(以分钟为单位)。 有什么功能或方法可以做到这一点吗?

您可以使用解析函数和GROUP BY如下:

SELECT KEY, SUM(DIFF) AS DIFF FROM
(SELECT KEY, 
       MIN(START_DTT) AS START_DTT, 
       MAX(END_DTT) AS END_DTT, 
       ROUND(24*60*(MAX(END_DTT) - MIN(START_DTT)),2) AS DIFF
FROM
(SELECT T.*,
       SUM(CASE WHEN LAG_END_DTT BETWEEN START_DTT AND END_DTT THEN 0 ELSE 1 END) 
        OVER (PARTITION BY KEY ORDER BY START_DTT) AS SM
FROM (SELECT T.*, 
             LAG(END_DTT) OVER (PARTITION BY KEY ORDER BY START_DTT) LAG_END_DTT
        FROM T) T)
GROUP BY KEY, SM)
GROUP BY KEY;

感谢 VBoka,db<>fiddle