Использование max с условиями ORACLE SQL - PullRequest
0 голосов
/ 29 января 2020

У меня есть последовательность участков, которые составляют маршрут, как показано ниже:

route   node_start  leg_ship_method    node_end       sequence
xx      MAD4        bus                MAD8              1
xx      MAD8        train              MAD8              2
yy      BCN1        plane              BCN8              1
yy      BCN8        boat                                 2
xx      MAD8        train              DNW1              3
xx      DNW1        train                                4

Мне интересно получить только те строки, которые относятся к идентификатору MAX-последовательности маршрута. После проверки максимального идентификатора последовательности, я хотел бы проверить, является ли node_start IN ('MAD8',BCN8'). Если нет, то я вычисляю свои MAX(sequence_id)-1. Мне не нужны никакие дополнительные условия. Поэтому мой ожидаемый результат:

   route    node_start  leg_ship_method    node_end       sequence
    xx      MAD8        train              DNW1              3
    yy      BCN8        boat                                 2

Мой код ниже, но это дает мне только максимум маршрута, но без условия, которое я упомянул выше

SELECT y.* 
FROM 
       (
       SELECT
             y.route,
            max(sequence) max_sequence
       FROM test y
       GROUP BY
             1
       ) AS x
       INNER JOIN test y
       on x.route = y.route and y.sequence = x.max_sequence
       ) AS t

1 Ответ

1 голос
/ 29 января 2020

Если я правильно понимаю, вы можете использовать коррелированный подзапрос и фильтр для конечных точек, которые вы хотите до , вычисляя max():

select t.*
from t
where t.sequence = (select max(t2.sequence)
                    from t t2
                    where t2.route = t.route and
                          t2.node_start in ('MAD8', 'BCN8')
                   );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...