|
Как правильно составить запрос | ☑ | ||
---|---|---|---|---|
0
Admin_Net_1C
03.05.17
✎
13:28
|
Добрый день народ. Подскажите пожалуйста, как правильно составить запрос, всю голову сломал уже.
Дано: ТаблицаЗаказы (Заказ, ДатаОтгрузки) ТаблицаМаршруты (Маршрут, ДатаНачала, ДатаОкончания). Может быть несколько маршрутов на один день недели (в реальности один постоянный, где ДатаОкончания=ПустаяДата и один временный, где ДатаОкончания<>ПустаяДата) Необходимо получить маршрут на выбранный день недели, причем, если есть постоянный и временный маршрут, то в итоговом запросе должен выбираться временный, как имеющий больший приоритет. |
|||
1
Redkiy
03.05.17
✎
13:30
|
сначала нужно определить чем постоянный отличается от временного маршрута
а потом запрос рисовать |
|||
2
Redkiy
03.05.17
✎
13:31
|
упс, <> не заметил
|
|||
3
catena
03.05.17
✎
13:32
|
Выбрать по дате начала=параметр и максимум дате окончания?
|
|||
4
ГдеСобака Зарыта
03.05.17
✎
13:32
|
Упорядочить по ДатаОкончания Убыв
|
|||
5
Redkiy
03.05.17
✎
13:37
|
(3) какой параметр?! тут соединение с тз заказов
|
|||
6
Admin_Net_1C
03.05.17
✎
13:42
|
(3) не получится, т.к. например ТаблицаМаршруты:
Маршрут1; ДатаНачала=01.05.2017; ДатаОкончания=Пусто Маршрут2; ДатаНачала=03.05.2017; ДатаОкончания=30.05.2017 для даты=10.05.2017 выдаст мне оба маршрута, а мне нужно получить именно Маршрут2 (т.к. он временный и в этом случае имеет приоритет) |
|||
7
ГдеСобака Зарыта
03.05.17
✎
13:42
|
(5) Где написано про соединение? всего лишь "Необходимо получить маршрут на выбранный день недели"
|
|||
8
Redkiy
03.05.17
✎
13:43
|
(0 )соединять по чему?
заказ везут в тот же день? |
|||
9
Admin_Net_1C
03.05.17
✎
13:43
|
(7) под "выбранным днем недели" подразумевается ДатаОтгрузки из ТаблицаЗаказы
|
|||
10
Admin_Net_1C
03.05.17
✎
13:44
|
(8) извиняюсь, пример упрощен, соединение идет по полю Контрагент, которое есть в обоих таблицах
|
|||
11
Redkiy
03.05.17
✎
13:45
|
сначала ВТ с группировкой по максимум(Маршруты.ДатаОкончания)
потом соедини ее еще раз со второй таблицей |
|||
12
Buster007
03.05.17
✎
13:46
|
тебе надо получить таблицу со всеми временными маршрутами на дату отгрузки? Если временных нет, то выводить постоянные?
|
|||
13
Redkiy
03.05.17
✎
13:47
|
(10) кроме контрагент
соединение для ВТ по ДатаОтгрузки = ДатаНачала для итоговой еще добавляется соединение по ДатаОкончания |
|||
14
Admin_Net_1C
03.05.17
✎
13:47
|
(12) да, именно так. Извиняюсь, если не сразу объяснил суть.
|
|||
15
ГдеСобака Зарыта
03.05.17
✎
13:48
|
ДатаОтгрузки соединять с ДатаНачала или ДатаОкончания?
|
|||
16
catena
03.05.17
✎
13:49
|
(5) Чего кричишь? В данном конкретном случае это не принципиально.
|
|||
17
catena
03.05.17
✎
13:49
|
(6)Про попадание даты в интервал в (0) ни слова.
|
|||
18
catena
03.05.17
✎
13:52
|
Тогда два соединения: по временным и по постоянным. Вывод ЕстьNULL(Временные.Маршрут,Постоянные.Маршрут)
|
|||
19
Buster007
03.05.17
✎
13:53
|
1-ая таблица
соединяешь все маршруты с условием Дата отгрузки между ДатаНачала ДатаОкончания делаешь поле с выбором, если ДатаОкончания заполнено, то 1, иначе 0 как временный маршрут 2-ая таблица выбираешь из 1ой таблицы группируешь по дате отгрузки и получаешь максимум по "временный маршрут" потом делаешь внутр соединение с 1ой таблицей по дате отгрузке и временному маршруту |
|||
20
Admin_Net_1C
03.05.17
✎
13:53
|
(17) ДатаОтгрузки естественно должна попадать в интервал временного маршрута между ДатаНачала и ДатаОкончания (если заданы обе даты), либо если только один постоянный маршрут, то ДатаОтгрузки >= ДатаНачала
|
|||
21
catena
03.05.17
✎
13:59
|
Выбрать
"Маршрут1" как маршрут, ДатаВремя(2017,1,1) как ДатаНач, ДатаВремя(2017,12,1) как ДатаКон Поместить тзМаршруты Объединить все Выбрать "Маршрут2" как маршрут, ДатаВремя(2017,2,1) как ДатаНач, ДатаВремя(1,1,1) как ДатаКон Объединить все Выбрать "Маршрут3" как маршрут, ДатаВремя(2017,3,1) как ДатаНач, ДатаВремя(2017,4,1) как ДатаКон Объединить все Выбрать "Маршрут4" как маршрут, ДатаВремя(2017,5,1) как ДатаНач, ДатаВремя(2017,6,1) как ДатаКон; Выбрать &Парам как Д поместить тз; Выбрать тз.Д, естьNULL(м1.маршрут,м2.маршрут) из тз как тз Левое Соединение тзМаршруты как м1 по Д>=м1.ДатаНач и Д<=м1.ДатаКон левое соединение тзМаршруты как м2 по Д>=м2.ДатаНач и м2.ДатаКон=ДатаВремя(1,1,1) |
|||
22
Admin_Net_1C
03.05.17
✎
14:19
|
(21) то, что нужно. Все верно получаем отдельно временные и постоянные и при помощи ЕСТЬNULL получим, либо временный (как приоритетный), либо основной (если нет временного)
Спасибо всем за участие. |
|||
23
Redkiy
03.05.17
✎
18:46
|
(21) (16) круто че...
У ТС на входе таблица заказов. Твой код подразумевает запрос в цикле. Читает внимательно заголовок темы! |
|||
24
catena
04.05.17
✎
06:50
|
(23)Круто, че... Мне же не платили за полноценное решение, готовое к интегрированию в произвольную систему. Мой запрос подразумевает любое преобразование таблицы для соединения. При определенном умственном напряжении, конечно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |