`

sql中区间不能有重叠的检测方法:

阅读更多
--sql中区间不能有重叠的检测方法:

--常规方法:
--check time period overlapping
if (  exists(select 1 from test_tb where  starttime <= @v_starttime and stoptime >= @v_starttime   ) or 
      -- v_start不能落入已有区间
      exists(select 1 from test_tb where  starttime <= @v_stoptime and stoptime >= @v_stoptime  ) or    
      -- v_stop不能落入已有区间
      exists(select 1 from test_tb where  starttime>=@v_starttime and starttime <= @v_stoptime ) or     
      -- 所有的start不能落入 v_start 和 v_stop区间
      exists(select 1 from test_tb where  stoptime >=@v_starttime and stoptime <= @v_stoptime )         
      -- 所有的stop不能落入 v_start 和 v_stop区间
   )
begin
   select 6001 --time overlaps
   return
end

--简化方法:
--上面后面两个可以简化为: 新的区间 不能包含任何已有区间,
--即 v_start 和 v_stop 形成的新区间 不能包含任何已有区间(这种情况是符合12两种情况的)34情况简化为:
starttimp >= @v_starttime and stoptime <= @v_stoptime

--check time period overlapping
if (  exists(select 1 from test_tb where  starttime <= @v_starttime and stoptime >= @v_starttime   ) or 
      -- v_start不能落入已有区间,条件1
      exists(select 1 from test_tb where  starttime <= @v_stoptime and stoptime >= @v_stoptime  ) or    
      -- v_stop不能落入已有区间,条件2
      exists(select 1 from test_tb where  starttimp >= @v_starttime and stoptime <= @v_stoptime )       
      -- v_start 和 v_stop 形成的新区间 不能包含任何已有区间(这种情况是符合12两种情况的)
   )
begin
   select 6001 --time overlaps
   return
end


--已有区间:                 a1|_____________|b1       a2|_____________|b2 
--新区间:    new start |_________________________________________________________|new stop 
--包含了上面的已有区间(符合条件1,2,但是不符合条件3)

 

分享到:
评论

相关推荐

    时间区间取并集Orace存储过程算法实现

    例如,当有多个时间区间重叠时,我们希望将这些重叠的部分合并成一个更大的区间。这种需求可以通过编写Oracle存储过程来实现。 ### 二、关键概念解析 #### 1. 时间区间 时间区间表示一个时间段,通常用两个时间点...

    Oracle时间区间段合并.pdf

    在提供的SQL语句中,主要使用了`SUM()`窗口函数和`CASE`表达式来判断当前区间段是否与前一个区间段重叠。 1. `CASE`表达式: 该表达式检查当前行的开始时间`BEG_TIM`是否小于或等于前一行的结束时间`END_TIM`的...

    (E文)基于成本的Oracle优化法则.pdf

    - **10.2 实际SQL的连接基数**:探讨实际SQL语句中的连接基数计算方法。 - **10.3 扩展和异常情况**: - **10.3.1 使用范围的连接**:讨论范围连接的优化方法。 - **10.3.2 不等于**:解释不等于谓词在连接基数...

    pk.rar_pk_中小学排课系统能做_排课_排课系统

    2. 时间冲突检测:通过构建时间表,对比不同课程的时间区间,避免时间重叠。可以使用区间树或布隆过滤器等数据结构来快速查询和更新。 3. 资源分配:根据教师、教室资源的限制,优化课程安排。可以采用优先级队列对...

    尚硅谷大数据技术之Hive-04(面试题)1

    这个问题涉及到日期区间重叠的计算。可以使用自连接来找出品牌的打折期间是否有重叠,然后排除重复的天数。首先,对每个品牌的打折开始日期和结束日期进行排序,接着通过自连接找出所有可能的日期重叠,然后使用条件...

    splunk api手册

    - **overlap**:重叠命令,检测数据集间的交集。 - **pivot**:透视命令,创建透视表。 - **predict**:预测命令,基于历史数据进行预测。 - **rangemap**:范围映射,将数值映射到预定义范围内。 #### 七、更多...

    百度校园招聘技术类笔试

    题目要求编写一个函数`foo`,该函数接收两个无符号整数数组`a1`和`a2`以及它们的长度`al1`和`al2`,目的是找出这两个数组区间重叠的部分,并返回重叠区间的长度。首先,我们可以将数组的区间转换为起始和结束点的...

    PyPI 官网下载 | gmql-0.0.6-py3-none-any.whl

    gmql-0.0.6-py3-none-any.whl这个文件名中的“py3”表示该版本适用于Python 3.x系列,而“none-any”则意味着这个包不依赖于特定的操作系统或架构,可以在任何支持Python 3的环境中运行。 gmql,全称Genomic Matrix...

    DeviceReservationSolution

    5. 冲突检测:通过比较每个设备的预约时间段,找出重叠的部分,可以有效地检测冲突。C#提供了丰富的数据结构和算法库,如List、HashSet等,可用于高效的数据处理。 6. 后台管理:管理员需要对设备和预约进行维护,...

    PHP 计算两个时间段之间交集的天数示例

    在PHP编程中,有时我们需要计算两个时间段之间的交集天数,这在日程管理、时间表安排或资源分配等场景非常常见。...例如,在处理预订系统、任务调度或任何涉及时间区间重叠的场景时,都能派上用场。

Global site tag (gtag.js) - Google Analytics