Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.07;
Скачать: CL | DM;

Вниз

хитрый 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
14-21796
Феликс
2002-10-10 15:38
2002.11.07
Тренир запретил мне думать или вопрос к качкам.


4-21873
Dm9
2002-09-25 22:07
2002.11.07
Как обновить desktop?


1-21656
Archon
2002-10-27 17:45
2002.11.07
как интегрировать компоненту в htlm документ


4-21872
Velocity
2002-09-25 08:55
2002.11.07
пара ламерских вопросов


14-21770
MsGuns
2002-10-18 12:17
2002.11.07
Происхождение логина