Использовать только самую последнюю строку в oracle start с / connect по предыдущему запросу - PullRequest
0 голосов
/ 03 мая 2018

Мой иерархический запрос выглядит так:

select ID, PARENT_ID, START_TIME
FROM PROCESS
START WITH ID='X'
CONNECT BY ID=PRIOR PARENT_ID

Моя проблема в том, что есть строки с одинаковым идентификатором 'X', и я хочу, чтобы возвращалась только самая последняя (когда процесс дублируется, его идентификатор тот же - изменить это нельзя). Кроме того, я хочу, чтобы он подключался только по предыдущему родительскому идентификатору для самой последней строки.

Из документов видно, что я не могу выполнить запрос в соединении, чтобы получить только последний предыдущий parent_id - мне нужно будет фильтровать код или есть способ сделать это в запросе?

1 Ответ

0 голосов
/ 03 мая 2018

Используйте аналитическую функцию ROW_NUMBER(), чтобы получить самую последнюю строку для каждого ID:

SELECT ID,
       PARENT_ID,
       START_TIME
FROM   (
  SELECT p.*,
         ROW_NUMBER() OVER (
           PARTITION BY id
           ORDER BY start_time DESC
         ) AS rn
  FROM   process p
)
WHERE rn = 1
START WITH ID = 'X'
CONNECT BY ID = PRIOR PARENT_ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...