SQL-запрос со сложным соединением - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть три таблицы:

  • Первая имеет три столбца (ID, Категория, StartDate, EndDate)
  • Вторая также имеет те же три столбца (ID,Category, StartDate, EndDate)
  • В третьем столбце три столбца (Key, Category1, Category2)

Я создал сценарий sql, который возвращает 1, если строка из второй таблицынаходится в пределах периода, определенного в первой таблице для данной категории (где table1.ID = table2.ID и table1.category = table2.category).

Теперь я хотел бы создать SQLскрипт, который проверяет, находится ли строка из второй таблицы в пределах периода, определенного в первой таблице для данной категории и идентификатора, или если находится в пределах периода, определенного с помощью ID1_StartDate и ID2_EndDate (где ID1 и ID2 являются последовательными, что означает, что они имеюттой же категории, и если мы поместим в порядке возрастания даты, эта категория id2 будет после id1), если в таблице 3 есть такая связь для этих двух категорий.

1 Ответ

2 голосов
/ 24 февраля 2011

Следующий запрос вернет идентификатор table1, если выполняется одно из следующих условий:

1) диапазон дат, описанный в таблице 1, вообще пересекается с диапазоном дат в table2

2) диапазон дат, описанный в таблице 1, пересекается с диапазоном дат, начинающимся с даты начала строки в таблице 2 и заканчивающейся датой окончания следующей хронологической строки в таблице 2 той же категории.

select distinct table1.id 
from table1 
inner join (select id, 
                   category, 
                   startdate, 
                   enddate,
                   lead(enddate) 
                        over (partition by category
                              order by enddate) as next_enddate
            from table2) 
on (table1.startdate < table2.enddate 
    or table1.startdate < table2.next_enddate)
   and table1.enddate >= table2.startdate
   and table1.ID = table2.ID 
   and table1.category = table2.category

Iне совсем понимаю, как использовать третью таблицу в этом сценарии, поэтому она пока игнорируется.Надеюсь, это все же поможет вам найти ответ, который вы ищете.

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