Пересекающиеся даты - PullRequest
0 голосов
/ 01 июня 2018

У меня есть данные в таблице, как показано ниже.

    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 голосов
/ 01 июня 2018

Изменить != на <:

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-совместимый синтаксис соединения вместо устаревшего неявного синтаксиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...