Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Задачка SQL  [new]
mishuto-kostya
Member

Откуда:
Сообщений: 7
Найдите следующий рейс (или рейсы), отправляющийся после рейса с номером 50. Выведите название маршрута, день недели, часы и минуты отправления.

km_prices (расценки за километр)

class(класс автобуса)
price (цена за км для данного класса)
models (марки или модели автобусов)
cod_model (код, суррогатный ключ)
name_model (название, атрибут носит справочный характер)
places (количество мест в автобусах данной марки)
class (класс комфортности)

buses (автобусы)

cod_bus (код автобуса, возможно его инвентарный номер)
bus_number (номер ГИБДД, атрибут носит чисто справочный характер)
cod_model (марка автобуса, внешний ключ)

points (населенные пункты)

cod_point (код, суррогатный ключ)
name_point (название)
distance (расстояние от пункта отправления)

routes (маршруты)

cod_route (код, суррогатный ключ)
name_route (название маршрута)

points_routes (связь между пунктами и маршрутами)

cod_point (код пункта, внешний ключ)
cod_route (код маршрута, внешний ключ)

trips (рейсы)

cod_trip (код рейса, суррогатный ключ)
week_day (день недели)
hour (часы)
minute (минуты)
cod_route (код маршрута)
cod_bus (код автобуса, назначенного на данный рейс)
tickets (количество проданных билетов)

Пункты и маршруты имеют связь "Многие-ко-Многим" (через каждый пункт может проходить несколько маршрутов и каждый маршрут имеет несколько остановок). Для этого служит таблица-связка points_routes.
Сущность trips (рейсы) связывает сущности Маршруты и Автобусы, дополняя их такими важными атрибутами как время отправления. Здесь же фиксируется и количество проданных билетов на каждый рейс (после отправления рейса поле обнуляется).
Дни недели в trips - числа от 1 до 7, где 1 - понедельник, 2 - вторник и т.д.
Номера и марки автобусов, названия маршрутов, названия населенных пунктов уникальны
Допустимо наличие маршрутов, не используемых ни в одном рейсе. Могут быть населённые пункты, не используемые ни в одном маршруте, маршруты, в которые ещё не включены никакие пункты, автобусы, не задействованные ни в одном рейсе. Аналогично, в базе может содержаться марка автобуса, но не быть ни одного автобуса такой марки.

Я смог написать вот это
SELECT name_route, week_day, hour, minute
FROM routes INNER JOIN trips ON routes.cod_route=trips.cod_route
where (hour*60+minute+week_day*1440)=
(select min(hour*60+minute+week_day*1440) from trips where (hour*60+minute+week_day*1440)>=
(select min(hour*60+minute+week_day*1440) from trips where cod_trip=50) and cod_trip<>50 )

не могу понять, как вывести маршрут, который будет идти после последнего на текущей неделе.
Т.е. если маршрут с номером 50 будет последним в этой неделе, то нужно вывести первый на следующей

К сообщению приложен файл (809418d1489570138[1] - 15Kb) cкачать
17 мар 17, 08:33    [20304548]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
mishuto-kostya
Member

Откуда:
Сообщений: 7


К сообщению приложен файл. Размер - 3Kb
17 мар 17, 08:35    [20304551]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
Elic
Member

Откуда:
Сообщений: 29990
mishuto-kostya
расценки за километр
Не на то расценки объявляешь.
17 мар 17, 08:50    [20304563]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 768
управжения по sql

случайно не оттуда задачка? уж больно стиль заданий похож.
17 мар 17, 09:07    [20304605]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
mlc
Member

Откуда: Asus Winter Cup
Сообщений: 487
mishuto-kostya,

Тебе сюда Студентам, желающим помощи, потом сюда Работа
17 мар 17, 09:20    [20304636]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6732
mishuto-kostya,

lag/lead
17 мар 17, 09:48    [20304740]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Вашу мать!
Ни вам "пожалуйста", нихрена..

Куда катится мир...
17 мар 17, 11:19    [20305075]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Тестировать лень. Будем считать за идею...
WITH
t0 AS (
  SELECT
    1 AS g,
    tp.*
  FROM
    trips tp
  UNION ALL
  SELECT
    2 AS g,
    tp.*
  FROM
    trips tp
),
t1 AS (
  SELECT
    g,
    cod_trip,
    LEAD( cod_trip ) OVER ( ORDER BY g, week_day, hour, minute ) AS cod_trip_n
  FROM
    t0
)
SELECT
  tp.*
FROM
  t1
  INNER JOIN trips tp ON (
        tp.cod_trip = t1.cod_trip_n )
WHERE
      t1.cod_trip = 50
  AND t1.g = 1
17 мар 17, 11:44    [20305227]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
mishuto-kostya
Member

Откуда:
Сообщений: 7
new_igor
управжения по sql

случайно не оттуда задачка? уж больно стиль заданий похож.

new_igor,

с универского сайта задачка, было любопытно решить, но не осилил

env
mishuto-kostya,

lag/lead

env,

простите, не знаю что это.

--Eugene--
Вашу мать!
Ни вам "пожалуйста", нихрена..

Куда катится мир...

--Eugene--,

ты сюда зашел высказать свое никчемное мнение? я и раньше заметил насколько здесь гнилые люди попадаются

Руслан Дамирович
Тестировать лень. Будем считать за идею...

Руслан Дамирович,

не уверен, сработает ли with, не сильно понимаю систему, но спасибо за идею, попробую
17 мар 17, 17:00    [20306866]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
mishuto-kostya
Member

Откуда:
Сообщений: 7
mlc,

Хотелось бы решить исключительно из любопытства, разобраться так сказать. Семестр тот я уже закончил давно (если нужны будут пруфы, то предоставю), а задачка осталось не решенной. На универском сайте задачу смогли решить лишь 5% отправивших, потому и стало любопытно, что там за задача. А если точнее 12 человек.
17 мар 17, 17:09    [20306905]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
mishuto-kostya
Member

Откуда:
Сообщений: 7
Вот пример теста, который у меня не проходит. Запрос должен вывести строку с рейсом №4

К сообщению приложен файл. Размер - 39Kb
17 мар 17, 17:26    [20306975]     Ответить | Цитировать Сообщить модератору
 Re: Задачка SQL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Как вариант -- добавляй сразу и маршруты на следующий понедельник
select * from trips
union all
select ..., 8 week_day from trips
where week_day=1 and cod_trip != 50
18 мар 17, 08:38    [20308313]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить