SQL Oracle присоединение двух таблиц с разной сортировкой

Есть таблица с данными:

  • Время создания запроса
  • Время, когда сотрудник взял в работу
  • Время, когда сотрудник закончил работу
  • Номер запроса
open_dttm       , valid_from_dttm , valid_to_dttm   , claim_no
2020-02-01 09:00, 2020-02-01 13:00, 2020-02-01 14:00, sr-090134

Сотрудники должны брать задания в работу по приоритету от старых к новым. Идея была выгрузить таблицу с сортировкой по дате создания и присоединить таблицу по дате, когда сотрудник взял в работу, сравнить номера запросов и определить, кто косячит.

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


Ответы (1 шт):

Автор решения: Alex R.

Я все таки добавил идентификатор сотрудника. Также осталось не ясным, что требуется вывести: сотрудников; вопросы которые не взяли; вопросы которые взяли ошибочно.

На мой взгляд нагляднее делать через exists.

select
  w.*
from claimes w
where exists
  (select
    null
   from claimes c
   where c.emp_id = w.emp_id
   and   c.open_dttm > w.open_dttm
   and   c.valid_from_dttm < w.valid_from_dttm)

Или

select
  w.*
from claimes w,
      claimes c
where c.emp_id = w.emp_id
and   c.open_dttm > w.open_dttm
and   c.valid_from_dttm < w.valid_from_dttm

Если вопросы нужны обоих типов, то условие с датами надо взять в скобки добавить

or (c.open_dttm < w.open_dttm
and   c.valid_from_dttm > w.valid_from_dttm)
→ Ссылка