домашнее задание - пытаетесь рассчитать несколько остановок рейсов между двумя городами? - PullRequest
0 голосов
/ 14 марта 2012

Это для класса базы данных, использующего Oracle DB 11g

Tables:

• Flight (flt_no, from_city, to_city, flt_distance, 
  flt_departs, flt_arrives, flt_price)

• Aircraft (craft_id, craft_name, cruising_range)

• Employee (emp_id, emp_name, emp_salary)

• Certified (emp_id, craft_id)

ЗАПРОС: Клиент хочет отправиться из Мэдисона в Нью-Йорк, совершив не более двух пересадок. Перечислите варианты отправления из Мэдисона, если клиент желает прибыть в Нью-Йорк к 18:00.

ЛЮБАЯ Помощь для этого. Я действительно даже не знаю, с чего начать.

EDIT Это то, что я придумал до сих пор. Пожалуйста, дайте мне знать, если я на правильном пути, по крайней мере, пожалуйста.

SELECT F.flt_no
  FROM Flight F
 WHERE F.from_city = 'Madison'
   AND F.to_city = 'New York'
   AND DATEPART(hh, F.flt_arrives) <= 18
 UNION
SELECT F.flt_no
  FROM Flight F
 WHERE (F.from_city = 'Madison'
        AND F.to_city IN (SELECT from_city
                            FROM Flight F
                           WHERE F.to_city = 'New York')
       )
    OR
       (F.to_city = 'New York'
        AND F.from_city IN (SELECT to_city
                              FROM Flight F
                             WHERE F.from_city = 'Madison')
        AND DATEPART(hh, F.flt_arrives) <= 18
       )

Ответы [ 2 ]

6 голосов
/ 14 марта 2012

Вспомните три случая:

  1. Прямой рейс.
  2. полет с 1 остановкой.
  3. полет с двумя остановками.

Теперь начните разбираться с делами.

Для 1. Ищите полет, который начинается и останавливается, вы знаете, где и когда будете лететь, верно?

Для 2. Подумайте оэти два полета.Где они будут начинаться и заканчиваться, что будет общего с двумя рейсами.Каковы временные критерии для каждого полета?

Для 3. Подумайте об этих 3 сегментах и ​​характеристиках каждого, включая зависимости

Тогда вы, наконец, захотите объединить все эти, если все выбор будетбыть показано.

Эта функция: выбрать to_char(DATE,'HH24') may help.

0 голосов
/ 11 декабря 2017

Поскольку @Michael Durrant дал ответ, я просто хочу представить решение в формате SQL. Надеюсь, это поможет. Пожалуйста, отметьте Не равно для подписи.

#Direct flight
select f.no
from flights f
where f.arrives=18:00 and (f.from='madison' and f.to='NewYork')

union

# Cases for one connecting flight

select f2.no 
from flights f1, flights f2
where f2.arrives=6pm and 
    f1.from='Madison' and f1.to<>'New York'
    and f1.to=f2.from and f2.to='New York'
    and f2.depart> f1.arrives
    and f2.arrives<'18:00'

union
#Cases involving two connecting flights 
select f3.no
from flights f1,flights f2, flights f3
where   f1.from='Madison'
    and f1.to=f2.from
    f1.to<>'New York'
    f2.to=f3.from
    f2.to<>'New York'
    and f3.to='New York'
    and f2.depart> f1.arrives   
    and f3.depart> f2.arrives

    and f3.arrives<'18:00'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...