关于有时间包含关系的sql

一个统计停电记录的表格,表中有三个字段:用户编号,开始时间,结束时间(格式:yyyy-mm-dd hh:mm:ss)

展示的数据是按照用户编号统计的,一个用户编号可能有很多条停电记录,即多条开始时间和结束时间

有一种情况是比如:同一个用户编号,第一条开始时间是12:00 结束时间13:00,第二条开始时间是11:00结束时间是14:00 (即第二条的时间段11:00-14:00包含第一条的时间段12:00-13:00),那么这两条其实就算为一条数据,因为存在包含关系

请问这种情况下要统计这个停电数据,把所有相同用户编号,有包含关系的算为一条,这个sql需要怎么写

SQL mmc0112 发布于 2023-9-25 15:17
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
掌上猪崽Lv5见习互助
发布于2023-9-25 17:03(编辑于 2023-9-25 17:03)

image.png

用left join可以搜出来有“被包含”的数据,再用is not null筛掉就可以

最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-9-25 15:22

用存储过程处理

  • mmc0112 mmc0112(提问者) 不会写。。。
    2023-09-25 15:36 
  • Z4u3z1 Z4u3z1 回复 mmc0112(提问者) 数据库不同,语法不同,直接度娘吧(数据库+存储过程 例如 SqlServer 存储过程)
    2023-09-25 15:41 
最佳回答
0
3333xzxLv4初级互助
发布于2023-9-26 09:00

SELECT DISTINCT t1.用户编号, 

t1.开始时间, t2.结束时间 FROM 停电记录表 t1

INNER JOIN 

停电记录表 t2 ON t1.用户编号 = t2.用户编号 WHERE

 t1.开始时间 <= t2.开始时间 AND t1.结束时间 >= t2.结束时间

  • 3关注人数
  • 298浏览人数
  • 最后回答于:2023-9-26 09:00
    请选择关闭问题的原因
    确定 取消
    返回顶部