如何把有包含关系的两条时间数据,合并成一条数据

有相同一户人家 有两条停电数据 :

1、第一条停电kssj开始时间是今天的10:00:00 ,jssj结束时间是今天的11:00:00

2、第二条停电kssj开始时间是今天的10:30:00 ,jssj结束时间是今天的12:00:00

那么其实这户人家停电时间是10:00:00-12:00:00

请问这样的两条数据,怎么写sql把他进行合并成一条数据,受累写详细点

SQL mmc0112 发布于 2024-6-24 10:11
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
华莉星宸Lv7资深互助
发布于2024-6-24 10:14

弱弱的问一句,按照正常的业务不会产生你这样的两行数据

我建议先去查查这两天数据产生的原因

这属于数据不规范

  • mmc0112 mmc0112(提问者) 是的,就是数据不规范,所以让我这给整规范了
    2024-06-24 10:28 
  • 华莉星宸 华莉星宸 回复 mmc0112(提问者) 你这判断的条件逻辑我感觉很复杂,要写存储过程,你的两个时间段不连续的时候怎么处理
    2024-06-24 10:36 
  • mmc0112 mmc0112(提问者) 回复 华莉星宸 不连续的话就视为两条,因为他没有重合的部分嘛,我觉得也很复杂
    2024-06-24 10:41 
  • 华莉星宸 华莉星宸 回复 mmc0112(提问者) 直接在业务端规范掉这种明显的数据不规范,是最好的
    2024-06-24 10:44 
最佳回答
0
可遇不可求Lv6初级互助
发布于2024-6-24 10:21(编辑于 2024-6-24 10:22)

select 用户,min(开始时间),max(结束时间) 

from 表 

group by 用户

  • mmc0112 mmc0112(提问者) 请问下这个仅限于同一天有两条数据,万一同一天有很多条数据,其中只有两条不规范需要合并,这种写法是不是不适用
    2024-06-24 10:27 
  • 没有想好名字那就叫小明吧 没有想好名字那就叫小明吧 回复 mmc0112(提问者) 这个写法适用
    2024-06-25 10:42 
最佳回答
0
Zzz1002Lv2见习互助
发布于2024-6-25 10:11
WITH A AS  (SELECT 1 AS CONCAT_GROUP,TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 06:00:00' AS START_TIME,TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 08:00:00' AS END_TIME FROM DUAL UNION  SELECT 1,TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 10:00:00',TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 11:00:00' FROM DUAL UNION SELECT 1,TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 10:30:00',TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 12:00:00' FROM DUAL UNION  SELECT 1,TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 15:30:00',TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 16:00:00' FROM DUAL) SELECT     C.CONCAT_GROUP,     C.START_TIME,     C.END_TIME FROM     (         SELECT             B.*,             ROW_NUMBER()OVER(PARTITION BY B.CONCAT_GROUP, B.START_TIME ORDER BY END_TIME DESC) AS RANK         FROM             (                 SELECT                     A.CONCAT_GROUP,                     CASE WHEN LAG(A.END_TIME)OVER(PARTITION BY A.CONCAT_GROUP ORDER BY A.END_TIME) BETWEEN A.START_TIME AND A.END_TIME                           THEN LAG(A.START_TIME)OVER(PARTITION BY A.CONCAT_GROUP ORDER BY A.START_TIME)                          ELSE A.START_TIME                     END  AS START_TIME,                     A.END_TIME                 FROM A             ) B     )C WHERE     C.RANK=1 以上代碼僅限合併2條連續時間段資料。

  • 4关注人数
  • 164浏览人数
  • 最后回答于:2024-6-25 10:11
    请选择关闭问题的原因
    确定 取消
    返回顶部