Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.12.152.100] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Доброго времени суток.
Встретилась задача : Схема данных: Станции station (station_id, station_name) Поезда (train_id, train_code) Расписание (station_id, train_id, arrive_time, departure_time) Считаем, что поезда ходят каждый день по одному и тому же расписанию. Время прибытия и отправления указано с точностью до минуты. Нужно найти станцию, на которой одновременно находится максимальное количество поездов. Она не элементарная, но, наверное и не такая сложная. Я понимаю что нужно для каждой станции посчитать максимальное количество поездов у которых промежуток пребывания пересекается, потом взять станцию с наибольшим показателем. Но с какой стороны подступиться даже не знаю. Буду признателен за помощь. |
Сообщ.
#2
,
|
|
|
Цитата Nikolaiko @ с какой стороны подступиться даже не знаю В подзапросе соберите в единый набор все arrive_time и departure_time. После чего привяжите к этим временам копию исходной таблицы по попаданию времени в диапазон, сгруппируйте по времени и станции, посчитайте количество и возьмите первую запись. |
Сообщ.
#3
,
|
|
|
Akina, спасибо за ответ.
Я попробовал так : SELECT copyTable.station_id, copyTable.arrival_time, copyTable.departure_time, COUNT(*) FROM ( SELECT public.schedule.arrival_time, public.schedule.departure_time FROM public.schedule ) times JOIN ( SELECT * FROM public.schedule ) copyTable ON ( copyTable.arrival_time < times.departure_time AND ( copyTable.departure_time is NULL OR copyTable.departure_time > times.arrival_time ) ) GROUP BY copyTable.station_id, copyTable.arrival_time, copyTable.departure_time ORDER BY COUNT Но там в количестве какое-то неимоверное число приходит, там стольких отметок в принципе нет на станции. |
Сообщ.
#4
,
|
|
|
Цитата Nikolaiko @ Я попробовал так Какое отношение эта, с позволения сказать, попытка, имеет к предложенной мной реализации? Цитата Akina @ В подзапросе соберите в единый набор все arrive_time и departure_time SELECT arrival_time AS time_point FROM public.schedule UNION SELECT departure_time FROM public.schedule |
Сообщ.
#5
,
|
|
|
Прошу прощения, я плохо знаю SQL поэтому неверно понял ваше предложение.
|