17,086
社区成员
发帖
与我相关
我的任务
分享
--给你个例子,相差为1的进行合并,你按照这种逻辑改一下
WITH T1 AS
(SELECT 'A' ID, 1 ST, 2 ET
FROM DUAL
UNION ALL
SELECT 'A' ID, 3 ST, 7 ET
FROM DUAL
UNION ALL
SELECT 'A' ID, 8 ST, 10 ET
FROM DUAL
UNION ALL
SELECT 'A' ID, 12 ST, 22 ET
FROM DUAL
UNION ALL
SELECT 'B' ID, 1 ST, 2 ET
FROM DUAL
UNION ALL
SELECT 'B' ID, 3 ST, 7 ET
FROM DUAL
UNION ALL
SELECT 'B' ID, 9 ST, 10 ET
FROM DUAL)
SELECT X1.ID, X1.ST, MIN(X2.ET)
FROM (SELECT *
FROM (SELECT T1.*,
ST - LAG(ET) OVER(PARTITION BY ID ORDER BY ST) GAP
FROM T1) D1
WHERE D1.GAP IS NULL
OR D1.GAP > 1) X1,
(SELECT *
FROM (SELECT T1.*,
LEAD(ST) OVER(PARTITION BY ID ORDER BY ST) - ET GAP
FROM T1) D2
WHERE D2.GAP IS NULL
OR D2.GAP > 1) X2
WHERE X2.ST >= X1.ST
AND X1.ID = X2.ID
GROUP BY X1.ID, X1.ST
ORDER BY ID,ST;