Имя: Пароль:
1C
 
Помогите с простым запросом
0 Мигрень
 
07.08.22
15:48
Нужно выбрать ПОСЛЕДНИЕ Заказы клиентов за месяц в разрезе покупателей
1 RomanYS
 
07.08.22
15:52
(0) бери заказы с максимальными датами. Или коррелированный запрос
2 Мигрень
 
07.08.22
15:55
(1) коррелированнный запрос не знаю что такое. Понятно что заказы с максимальными датами, но что-то не соображу, наверное тут будет соединение внутреннее двух запростов что ли..
3 RomanYS
 
07.08.22
16:05
Сначала группировкой собираешь максимальные даты, потом по ним соединяешь с исходной. Только документов с одинаковой датой может быть много
4 PR
 
07.08.22
16:06
Сначала выбираешь из Заказы ВТ1 с максимальными датами покупателей
Потом выбираешь из ВТ1 ЛС Заказы по контрагенту и дате ВТ2 с максимальными регистраторами покупателей
5 Мигрень
 
07.08.22
16:08
(3), (4) да нашел уже что-то подобное здесь v8: v8: выбрать регистратор с максимальной датой пойду курить консоль запросов
6 PR
 
07.08.22
16:12
(5) Говно какое-то
7 Мигрень
 
07.08.22
16:13
(6) чой-то, предпоследний пост в той ветке вполне себе перспективная идея
8 PR
 
07.08.22
16:23
(7) Ну да ну да
Прочитай внимательно (3)
9 Мигрень
 
07.08.22
16:40
(8) не пойму, как у заказов, которые последовательно падают из CRM, может быть одинаковое время
10 PR
 
07.08.22
16:42
(9) Удачи
11 alarm2020
 
07.08.22
16:53
(0) Просто сделай срез последних.
1. Группировка по покупателям + МАКСИМУМ(Дата)
2. Соединение этой таблицы с исходной
12 PR
 
07.08.22
16:55
(11) Вот еще один одаренный чукча не читатель
13 RomanYS
 
07.08.22
17:06
(4) Давай немного усложним задачу: нужно получить по 3 последних заказа от каждого покупателя.
14 PR
 
07.08.22
17:08
(13) Зачем?
15 Мигрень
 
07.08.22
17:11
(11) да собственно уже сделал, всё работает. PR специально жути нагоняет, видимо ему скучно
16 PR
 
07.08.22
17:14
(15) Да, мы профессионалы такие, постоянно жути нагоняем, от скуки, думаю
17 Мигрень
 
07.08.22
17:16
(16) не надо усложнять там, где частный случай позволяет обойтись простым решением. Такое усложнение - это дилетантизм
18 PR
 
07.08.22
17:23
(17) Боже мой, из альтруистических побуждений учишь дилетанта уму разуму, а дилетант еще с напыщенным видом что-то задвигает про усложнения и дилентатизм
Да удачи тебе от всей души, продолжай дальше с умным видом плескаться в своем свином корытце :))
19 PR
 
07.08.22
17:28
+(14) Если вопрос из чисто спортивного интереса, то ответ из чисто спортивного интереса следующий

Если нужно получить небольшое количество последних заказов, ну то есть 3 или 5
То делается 3 или 5 ВТ, в каждой из которых выбираются максимумы, но без предыдущих ВТ
Потом все эти 3 или 5 ВТ соединяются с заказами и потом все эти соединенные таблицы объединяются

А вот если нужно, выбрать, например, по 100 последних заказов, тогда сотню ВТ рисовать уже не очень, нужно придумывать что-то другое
20 Мигрень
 
07.08.22
17:32
(18) я бы в понедельник сходил в поликлинику, нервы вообще ни к черту
21 PR
 
07.08.22
17:35
(20) Сходи, я не против, мне-то ты зачем об этом сообщаешь
22 Мигрень
 
07.08.22
17:36
(21) да так просто, мысли вслух такскать. Ну покеда, учитель, мне работать надо
23 RomanYS
 
07.08.22
17:41
(19) Всё уже придумано. Называется коррелированный запрос.
24 PR
 
07.08.22
17:42
(23) Напишешь запроса для сабжа?
25 PR
 
07.08.22
17:44
+(24) А то термин я тоже слышал, всегда хотел посмотреть, что это за зверь такой коррелированный запрос и чем от обычного соединения отличается
26 RomanYS
 
07.08.22
17:44
(19) А ещё в свежих платформах есть АВТОНОМЕРЗАПИСИ, что позволяет в данной задаче получить уникальный ключ и обойтись без (4)
27 RomanYS
 
07.08.22
17:50
(24) гуглится же на раз.

ВЫБРАТЬ
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.Контрагент
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ
    ЗаказПокупателя.Ссылка В
            (ВЫБРАТЬ ПЕРВЫЕ 3
                Док.Ссылка КАК Ссылка
            ИЗ
                Документ.ЗаказПокупателя КАК Док
            ГДЕ
                Док.Контрагент = ЗаказПокупателя.Контрагент
            УПОРЯДОЧИТЬ ПО
                Док.Дата убыв,
                Ссылка убыв)
28 PR
 
07.08.22
18:11
(27) И сколько будет записей в итоге на двух контрагентов, где по три заказа одной и той же датой на каждого контрагента?
29 RomanYS
 
07.08.22
18:33
(28) запрос решает задачу (13), будут отобраны по 3 заказа (при их наличии), порядок задается внутри вложенного запроса
30 PR
 
07.08.22
18:35
(29) У тебя будет 18 строк
А должно быть 6
31 RomanYS
 
07.08.22
18:48
(30) перечитай текст запроса, а лучше запусти в консоли. По 2 контрагентам никогда там не будет больше 6 строк
32 PR
 
07.08.22
18:50
(31) Ладно, не буду спорить, что-то подутомило уже сегодня воевать с ветряными мельницами
33 Said_We
 
07.08.22
20:51
(27) Не проверял, но не похоже. "Выбрать первые 3" вернет всего три ссылки. На сколько я понимаю, для каждого контрагента необходимо по 3 последних заказа.
Так как в 1С нет полноценного ROW_NUMBER() и оконных функций, то левое соединение таблицы с сома собой.
34 RomanYS
 
07.08.22
21:02
(33) см. (31), добавить нечего.
И да теперь есть АВТОНОМЕРЗАПИСИ - теперь можно решать такие задачи без коррелированных запросов
35 Said_We
 
07.08.22
21:35
(34) А то что в (0) написано "в разрезе покупателей" - о чём говорит?
По мне так говорит, что для каждого покупателя необходимо искать последние. Не знаю откуда появилось 3, а не 1 или 5. Всю ветку не читал.
36 Said_We
 
07.08.22
21:39
(34) Обрезанный ROW_NUMBER(), который есть в 1С и без оконных функций не решает задачи без коррелированных запросов.
В 1С всё равно джоином саму с собой цеплять надо. "Вырезание гланд автогеном через Жо", но по другому пока в 1С никак.
37 RomanYS
 
07.08.22
22:13
(35) >> Всю ветку не читал.
Ну давай перескажу вкратце
В (27) решение задачи (13).
Да, оно для каждого контрагента найдет по 3 заказа.
Да, это коррелированный запрос.

(36)>> В 1С всё равно джоином саму с собой цеплять надо.
Одним джойном, без (4) и без (19)
38 Said_We
 
07.08.22
22:50
(37) "Да, это коррелированный запрос." - точно?
39 PR
 
07.08.22
22:50
(37) Кстати, да, будет не 18 строк, а 6
Не знаю, правда, для выборки последнего документа будет оптимальнее так или с использованием ВТ и максимумов
40 PR
 
07.08.22
22:52
(38) А что тебя смущает?
1С умеет коррелированные запросы только такого плана, когда в условии запрос с использованием поля из основного запроса
41 Said_We
 
07.08.22
23:04
(40) Там их несколько видов. Не помню этот вид относится или нет.