|
Оптимальность запроса на получене второго документа от Заказчика | ☑ | ||
|---|---|---|---|---|
|
0
Fedor-1971
26.01.15
✎
11:50
|
Задача: получить даты двух первых документов от каждого Заказчика
Есть запрос: ВЫБРАТЬ РАЗЛИЧНЫЕ тэоЗаказНовый.Ссылка КАК Ссылка ПОМЕСТИТЬ табЗаказов ИЗ Документ.Заказ КАК тэоЗаказНовый ГДЕ НЕ тэоЗаказНовый.ПометкаУдаления И тэоЗаказНовый.Заказчик В(&масЗаказчиков) ; ВЫБРАТЬ тэоЗаказНовый.Ссылка, КоличествоЗаказов.Заказчик, Ур1.Д1 ПОМЕСТИТЬ табУровень1 ИЗ табЗаказов КАК тэоЗаказНовый Левое Соединение (ВЫБРАТЬ Минимум(уровень.Ссылка.Дата) КАК Д1, уровень.Ссылка.Заказчик КАК Заказчик ИЗ табЗаказов КАК уровень СГРУППИРОВАТЬ ПО уровень.Ссылка.Заказчик) как Ур1 по тэоЗаказНовый.Ссылка.Заказчик=Ур1.Заказчик ; ВЫБРАТЬ тэоЗаказНовый.Ссылка, тэоЗаказНовый.Заказчик, тэоЗаказНовый.Сколько, тэоЗаказНовый.Д1, Минимум(Ур2.Д2) ИЗ табУровень1 КАК тэоЗаказНовый Левое Соединение (ВЫБРАТЬ уровень.Ссылка.Дата КАК Д2, уровень.Ссылка.Заказчик КАК Заказчик ИЗ табЗаказов КАК уровень) как Ур2 по тэоЗаказНовый.Ссылка.Заказчик=Ур2.Заказчик и Ур2.Д2>тэоЗаказНовый.Д1 СГРУППИРОВАТЬ ПО тэоЗаказНовый.Ссылка, тэоЗаказНовый.Заказчик, тэоЗаказНовый.Сколько, тэоЗаказНовый.Д1 Напрягает вот эта часть: Левое Соединение (ВЫБРАТЬ уровень.Ссылка.Дата КАК Д2, уровень.Ссылка.Заказчик КАК Заказчик ИЗ табЗаказов КАК уровень) как Ур2 по тэоЗаказНовый.Ссылка.Заказчик=Ур2.Заказчик и Ур2.Д2>тэоЗаказНовый.Д1 т.е. выбираем ВСЕ оставшиеся документы, кроме первого и только потом получаем минимальную дату из полученной выборки. В результате напрягаем сервер, может есть более оптимальный алгоритм? |
|||
|
1
Fedor-1971
26.01.15
✎
12:45
|
странно, но похоже, что это нормальная работа запросов.
|
|||
|
2
Креатив
26.01.15
✎
13:00
|
(1) Всё зависит от того, зачем тебе такие данные? Если тебе не обязательно в одной строке получать эти два документа, то можно объединить первые документы со вторыми. Потом отсортировать по заказчику и дате. На заказчика будет не более двух строк идущих подряд.
|
|||
|
3
Fedor-1971
26.01.15
✎
13:17
|
(2) что-бы объединить первые+вторые, вторые сначала нужно получить, т.е. опять-же выбрать.
Для ограничения выборки имело бы смысл обработать только 2 первых документа каждого Заказчика, а не выбирать все оставшиеся (кроме первого). |
| Форум | Правила | Описание | Секции | Поиск |