Форум: "Базы";
Текущий архив: 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