|
|
|
Построение запроса к БД
|
|||
|---|---|---|---|
|
#18+
Попробую описать приблизительно суть проблемы. Есть несколько организаций, осуществляющих перевозку, в каждой из них есть парк машин, каждая машина имеет свой номер. Машины могут переходить из одной организации в другую с течением времени. Для каждой из организаций существует свой тариф на перевозку, рублей в час, который может меняться с течением времени. Далее, имеется ведомость, в которой имеется номер машины, дата и количество отработанных часов за эту дату. Теперь главное, нужно в конце месяца рассчитать, сколько заработала каждая из компаний перевозчиков. Я создал приблизительно такую БД. Таблица Vehicles – номера маши Таблица Organizations – организации Таблицa Vehicle-organization(Vehicle_id, organization_id, date) – связанная с двумя предыдущими – для определения, с какого числа машина работает в данной организации. Таблица Rates(Rate, organization_id, date) – размер тарифа и дата, с которого он действует. Таблица vedomost (vehicle_id,date,hours) – ведомость отработанного времени по дням. Я предполагаю, что одним запросом можно вытянуть на дату рейса и организацию, для которой осуществляется перевозка и тариф на эту дату для этой организации, но что-то с реализацией у меня неважно. Можно написать обработку, и добавить дополнительные поля к таблице ведомость, но так не хочется. А может я таблицы я неправильно создал… Помогите плз, в каком направлении вести работу. Да делаю все это под Access? Поэтому и пишу в этот форум %) Если что-то не дописал, то я уточню, голова идет кругом и нет новых мыслей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 08:27:58 |
|
||
|
Построение запроса к БД
|
|||
|---|---|---|---|
|
#18+
Диско_Мишка Таблицa Vehicle-organization(Vehicle_id, organization_id, date) – связанная с двумя предыдущими – для определения, с какого числа машина работает в данной организации. Таблица Rates(Rate, organization_id, date) – размер тарифа и дата, с которого он действует. Таблица vedomost (vehicle_id,date,hours) – ведомость отработанного времени Попробуй сделать одну основную таблицу где будешь отмечать какого числа, на кого (организация) и сколько отработала машина. ТОгда одним запросом сможешь получить сколько денюшков платить. А по оплате - действие тарифа лучше описать не как "с какого числа" - а как с какого по какое - иначе сложно подзапрос сделать будет. Последний траф можешь сделать открытым и запрос на дату будет что то вроде дата между даты_тарифа или дата > дата начала тарифа и тариф открыт. .... это так - мысли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 10:33:24 |
|
||
|
Построение запроса к БД
|
|||
|---|---|---|---|
|
#18+
текст SQL: SELECT Vehicles.№_автомобиля, Organizations.организация, [Vehicle-organization].дата, vedomost.дата, vedomost.к_во_часов, Rates.тариф, [Rates Запрос].[Max-дата], [к_во_часов]*[тариф] AS сумма FROM ((Vehicles INNER JOIN vedomost ON Vehicles.№_автомобиля = vedomost.№авт) INNER JOIN ((Organizations INNER JOIN Rates ON Organizations.организация = Rates.организация) INNER JOIN [Vehicle-organization] ON Organizations.организация = [Vehicle-organization].организация) ON Vehicles.№_автомобиля = [Vehicle-organization].№авт) INNER JOIN [Rates Запрос] ON (Rates.дата = [Rates Запрос].[Max-дата]) AND (Organizations.организация = [Rates Запрос].организация) GROUP BY Vehicles.№_автомобиля, Organizations.организация, [Vehicle-organization].дата, vedomost.дата, vedomost.к_во_часов, Rates.тариф, [Rates Запрос].[Max-дата], [к_во_часов]*[тариф] HAVING (((vedomost.дата)=[Vehicle-organization.дата])); все работает, только не один запрос, а два - на последнюю дату тарифа для организации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 11:05:32 |
|
||
|
Построение запроса к БД
|
|||
|---|---|---|---|
|
#18+
плюс база ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 11:07:39 |
|
||
|
Построение запроса к БД
|
|||
|---|---|---|---|
|
#18+
пардон, косяк :) если доп. запрос на последнюю дату тарифа - то все считает по последней дате :(( но где то в этом направлении рыть надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 11:25:13 |
|
||
|
Построение запроса к БД
|
|||
|---|---|---|---|
|
#18+
База данных так и выглядит, и проблема именно в этом, определить тариф и организацию на дату перевозки, при условии , что машины постоянно меняются между организациями и тарифы тоже подвержены изменению. Может еще какие идеи будут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 12:19:55 |
|
||
|
Построение запроса к БД
|
|||
|---|---|---|---|
|
#18+
Таблицa Vehicle-organization(Vehicle_id, organization_id, date) добавить поле Last_rates, при оформлении заявки туда попадает последний дейсвующий для этой организации тариф (запрос в базе Rates Запрос ) и тогда в общем должно что-то получиться. А еще - зачем ведомость: Таблицa Vehicle-organization(Vehicle_id, organization_id, date, Last_rates) добавляем время - hour, и можем спокойно одной машиной обслужить за один день нескольких клиентов(табл. vedomost соответственно ненужна). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 12:48:34 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1510&tid=1669807]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
7ms |
get forum data: |
5ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 293ms |

| 0 / 0 |
