Пытаетесь отобразить данные, которые имеют более одного дня между двумя датами одного и того же пользователя? - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь создать запрос в Toad для Oracle, который позволяет мне извлекать пользователей, у которых был разрыв между предыдущими и нынешними супервизорами более одного дня, с типом супервизора «Зарегистрированный руководитель».

Например, если у пользователя есть супервизор с конечной датой 20.10.2009, я ожидаю увидеть супервизора, назначенного на 21.10.2009. Если нет, то я хотел бы, чтобы эти исключения отображались, поскольку по состоянию на 22.10.2009 существует разрыв в один день. Если отображается дата «12/31/9999», это означает, что руководитель является текущим.

SELECT DISTINCT a.AssocID, a.SupervisorAssocID, TRUNC(a.StartDate), 
   TRUNC(a.EndDate), a.SupervisorType
FROM TableName a
INNER JOIN (SELECT AssocID, StartDate, EndDate
            FROM TableName
           ) b ON a.AssocID = b.AssocID
WHERE a.StartDate != TRUNC(b.StartDate) 
   AND TRUNC(b.EndDate) >  a.StartDate
   AND a.StartDate != TRUNC(b.EndDate)
   AND a.SupervisorType = 'Registered Principal';

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

Picture of Sample Data

1 Ответ

0 голосов
/ 28 октября 2019

Вы можете использовать аналитическую функцию LEAD, чтобы получить следующую дату начала:

SELECT *
FROM   (
  SELECT a.*,
         LEAD( startdate ) OVER (
           PARTITION BY AssocId
           ORDER BY StartDate ASC
         ) AS next_startdate
  FROM   tablename a
  -- WHERE SupervisorType = 'Registered Principal'
)
WHERE SupervisorType = 'Registered Principal'
AND   TRUNC( enddate ) + INTERVAL '1' DAY < TRUNC( next_startdate )

Примечание: неясно, где вы хотите фильтровать SupervisorType;Ваш запрос создает впечатление, что это должен быть внешний запрос, но он может быть внутренним, если вы хотите учитывать различия только между зарегистрированными принципалами, а не с любым другим типом супервизора.

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