Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];

Вниз

хитрый sql запрос   Найти похожие ветки 

 
Vlad2   (2002-10-17 07:41) [0]

Здравствуйте !
Ситуация такова:
1. существует таблица "Выполнение работ на маршруте" table Route(idRoute, ...) - автобусы работают на разных маршрутах.
2. каждый маршрут имеет нач. и конечную остановки table Station(idRoute, idStationStart, idStationStop).
3. при выполнении работ на разных маршрутах нужно учесть пробег при движении от кон. остановки предыдущего маршута до нач. остановки следующего, - это таблица RunStation(idStationStart, isStationStop, run).
4. для задания порядка работ в таблице Route есть поле idOrder.

Кроме лобового решения: задать (tsql) цикл по idOrder и считать эти RunStation.run должно существовать более правильное. Это решение слишком затратно по времени. Как бы зделать это одним запросом ?


 
Zlob   (2002-10-17 07:59) [1]

А в чем задача то ?


 
Vlad2   (2002-10-17 08:08) [2]

> Zlob
Нужно в таблице Route для каждого маршрута вычислить поле Route.run = [пробег от кон. остановки текущего маршрута до нач. остановки следуюшего]. Следующий маршрут - это запись cо следующим значением Route.idOrder. Разумеется, всё происходит в пределах одного дня.


 
Vlad2   (2002-10-17 08:49) [3]

Замечание: обычно в таких случаях я считаю, что БД спроектирована неверно. Но в данном случае порядок выполнения работ (Route.idOrder) имеет смысл, что противоречит теории. При этом остается ощущение, что предложение sql можно сформулировать.


 
dimis   (2002-10-17 09:36) [4]

хотя я и не совсем понял условие,но по-моему там
select sum(run) from RunStation
where ...
надо только выбрать маршруты относящиеся к конкретному автобусу.
не совсем понятно правда зачем при этом использовать порядок работ, может подробнее пояснишь


 
Vlad2   (2002-10-17 09:46) [5]

> dimis
RunStation содержит значение RunStation.run, относящиеся к разным (соседним в смысле Route.idOrder) записям таблицы Route. Существенен именно порядок (реально существующий) выполнения маршрутов Route.idRoute, т.к. разные пары {кон. остановка текущего маршрута, нач. остановка следующего маршрута} имеют разные пробеги.


 
pahan_s   (2002-10-17 09:50) [6]

что значит
...поле Route.run = [пробег от кон. остановки текущего маршрута до нач. остановки следуюшего]..., нужно вычислить только пробег на исходные позиции маршрута, или как?

а запись в Route происходит при каждом прохождении маршрута каждого автобуса?

Кстати какое поле Код Автобуса?


 
Vlad2   (2002-10-17 10:08) [7]

> pahan_s
В таблице работ Route поле idRoute - идентификатор маршрута. Найти для него пробег просто. Но далее выполняется следующая работа - следующая запись Route.idOrder. При этом происходит движение от кон. остановки выполненного до начальной этого следующего маршрута. Расстояния м-у остановками хранятся в RunStation(idStationStart, isStationStop, run). И для того, чтобы узнать это расстояние нужно иметь idRoute предыдущего (для определения конечной остановки) и idRoute следующего (для определения начальной). Это расстояние записывается в поле таблицы Route для первого маршрута.
Код автобуса, конечно, есть. Это Route.idCar .


 
pahan_s   (2002-10-17 10:22) [8]

Дошло, щас помозгуем


 
ЮЮ   (2002-10-17 10:34) [9]

select Route.*, RunStation.run from Route
left join Route NextRout on Route.idCar=NextRout.idCar
and Route.idOrder+1=NextRout.idOrder
and Route.Date=NextRout.Date
left join Station LastSt on Route.idRoute=Station.idStationStop
left join Station FirstSt on NextRout.idRoute=Station.idStationSart
left join RunStation on
LastSt.idStation=RunStation.idStationStart and
FirstSt.idStation=RunStation.idStationStop


 
pahan_s   (2002-10-17 10:49) [10]

примерно так, если сумарный пробег

select
sum(rs.run)
from
route ro1, route ro2, station st1, station st1,
runstation rs
where ro1.idCar=<...>
and ro2.idCar=ro1.idCar and ro2.idorder=ro1.idorder+1
and st1.idroute=ro1.idroute and st2.idroute=ro2.idroute
and rs.isStationStart=st1.isStationStop and rs.isStationStop=st2.isStationStart;


 
Vlad2   (2002-10-17 10:58) [11]

Мужики ! Меня десь не было 0.5 часа, щас буду разбираться.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
4-21887
Budoudoo
2002-09-26 21:04
2002.11.07
Работа с телефонной линией. Модем.


14-21797
Forever
2002-10-17 19:14
2002.11.07
Настройка win2k


1-21554
cosinus
2002-10-29 16:13
2002.11.07
Координаты курсора в коодинатной системе PaintBox-а


1-21625
Юлия
2002-10-26 17:57
2002.11.07
сознание компонент в run-time


3-21353
PAVELsinicinV
2002-10-17 10:54
2002.11.07
какую размерность имеет символьное поле (Characner 2)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский