重叠日期

时间:2018-06-01 05:41:56

标签: sql oracle plsql

我的数据如下表所示。

    Col1 | Startdate | Enddate
    -----------------------
     A   |  D1       | D14
     B   |  D5       | D18
     C   |  D20      | D24
     D   |  D30      | D40

我想得到日期重叠的col1,我可以通过在sql语句中两次引用我的表来获取它。但是,结果集如下所示。

    select t1.col1, t2.col1 from table t1, same_table t2
    where t1.col1!= t2.col1
      and t1.startdate <= t2.enddate
      and t1.enddate >= t2.startdate;

    Table1.Col1|Table2.col2
    -----------------------
       A       |   B
       B       |   A

任何人都可以建议如何过滤掉第一个与第一个重复的记录吗?

1 个答案:

答案 0 :(得分:3)

!=更改为<

select t1.col1, t2.col1 
from table t1
join table t2 on t1.col1 < t2.col1 
                 and t1.startdate <= t2.enddate      
                 and t1.enddate >= t2.startdate;

这将过滤掉记录:

 Table1.col1 | Table2.col2
 -----------------------      
     B       |    A

注意:使用显式 ANSI兼容的连接语法,而不是旧式的隐式语法。