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

Откуда:
Сообщений: 7887
вот как без циклов

Автобусный парк. Есть маршруты - и есть время выезда и время возврата в
парк (для простоты пусть все в течение суток). Вернувшийся автобус может
сразу поехать по другому маршруту. Сколько нужно автобусов?


пусть везде целые числа в таблице: id маршрута, час выезда, час возврата

маршрут выезд возврат
1 1 7
2 5 12
3 10 14
4 8 9
...
14 янв 14, 10:55    [15411956]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
Гость888
Guest
Сколько нужно автобусов для чего?
14 янв 14, 11:01    [15411981]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
Гость888
Сколько нужно автобусов для чего?


Какое нужно минимальное количество автобусов, чтобы обеспечить все маршруты?
14 янв 14, 11:19    [15412071]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
- Красоту в чем мерять будем ?
- Для версии sql 6.5 ?или вообще на pure sql ?
14 янв 14, 11:22    [15412088]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
Glory
- Красоту в чем мерять будем ?
- Для версии sql 6.5 ?или вообще на pure sql ?


чисто поскулить
14 янв 14, 11:30    [15412135]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
self join on route time intersection , count, max .
ничего интересного.
14 янв 14, 12:26    [15412507]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
aleks2
Guest
AlexandrPlus
Какое нужно минимальное количество автобусов, чтобы обеспечить все маршруты?


В ваших условиях
"минимальное количество автобусов" = "максимальному числу перекрытий интервалов 'выезд..возврат' маршрутов".

Запрашивается элементарно.
14 янв 14, 12:44    [15412641]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
aleks2
Guest
Ах да.

select top(1) count(*) as [Мин. кол-во автобусов]
             from таблица T1 inner join таблица T2 on T1.[выезд] between T2.[выезд] and T2.[возврат]
             group by T1.[маршрут]
             order by count(*) DESC
14 янв 14, 13:14    [15412918]     Ответить | Цитировать Сообщить модератору
 Re: Задачка на красивый запрос  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
aleks2
AlexandrPlus
Какое нужно минимальное количество автобусов, чтобы обеспечить все маршруты?


В ваших условиях
"минимальное количество автобусов" = "максимальному числу перекрытий интервалов 'выезд..возврат' маршрутов".

Запрашивается элементарно.


это верно - то есть найти интервал, пересекающийся с наибольшим числом других интервалов, тогда
число автобусов = число этих перекрытий плюс 1

в общем ясно - здесь ближе к практике - когда много вариантов и там: нагрузка на автобусы
равномерно распределилась, учесть длины-длительности путей, ...

PS в запросе чёта не то - где еще возможное условие перекрытия, ...
14 янв 14, 18:57    [15415081]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить