oracle 如何实现合并多条数据

默默前行的蜗牛 2015-04-24 01:52:29
oracle数据库表里有如下四条记录
日期 编号 起始 结束
2015/3/30 AA2525 2015/3/30 8:21 2015/3/30 9:47
2015/3/30 AA2525 2015/3/30 9:55 2015/3/30 11:19
2015/3/30 AA2525 2015/3/30 11:29 2015/3/30 11:30
2015/3/30 AA2525 2015/3/30 11:51 2015/3/30 11:52

我想把这四条记录进行合并(是根据上一条记录的结束与下一条记录的开始相差在30分钟以内就进行合并,否组不合并),
想得到的结果:
2015/3/30 AA2525 2015/3/30 8:21 2015/3/30 11:52
请问大牛们,如何用sql实现
...全文
268 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CT_LXL 2015-04-24
  • 打赏
  • 举报
回复
引用 楼主 ywf008 的回复:

--给你个例子,相差为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;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧