Минимальное время в пути - PullRequest
0 голосов
/ 19 апреля 2019

Отображение schedule_id, источника, пункта назначения и времени перемещения, в котором указано минимальное время в пути. Сортировать результат по расписанию.

Я попробовал этот код, и в моем запросе что-то отсутствует, так как я получаю сообщение об ошибке.

here is the schema for the query

 select sh.schedule_id,sh.source,sh.destination,sh.duration as travel_time
         from schedule sh
         (select min(sh.duration) from schedule)
         order by sh.schedule_id;

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Тогда только столбец, который выглядит как время прохождения DURATION, его тип данных NUMBER. Что означает это число? Минуты? Часы? Что-то еще?

В любом случае, вот один вариант, который вы могли бы рассмотреть. Он «сортирует» длительности (то есть «время в пути»), используя аналитическую функцию RANK, и извлекает строку (или строки), чья продолжительность минимальна.

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

SCHEDULE CTE представляет некоторые тестовые данные; вам нужен код, который начинается со строки 6.

SQL> with schedule (schedule_id, source, destination, duration) as
  2    (select 1, 'Paris', 'London'   , 8 from dual union all
  3     select 2, 'Berlin', 'Prague'  , 4 from dual union all
  4     select 3, 'Zagreb', 'Budapest', 4 from dual
  5    )
  6  select schedule_id, source, destination, duration
  7  from (select schedule_id, source, destination, duration,
  8           rank() over (order by duration) rn
  9        from schedule
 10       )
 11  where rn = 1;

SCHEDULE_ID SOURCE DESTINAT   DURATION
----------- ------ -------- ----------
          2 Berlin Prague            4
          3 Zagreb Budapest          4

SQL>
1 голос
/ 19 апреля 2019

Почти правильно. Вы забыли определить минимальное время в пути в предложении where.

SELECT   sh.schedule_id,
         sh.source,
         sh.destination,
         sh.duration as travel_time
FROM     schedule sh
WHERE    sh.duration = (select min(duration) from schedule) -- This is where the problem was.
ORDER BY sh.schedule_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...