Имя: Пароль:
1C
1С v8
Получить несколько максимальных значений в запросе с группировкой
0 Melcor
 
20.07.19
09:02
Добрый день. Помогите решить не тривиальную задачку. Есть запрос по регистру продаж со след полями: РодительНом, Сезон, ХарактеристикаНоменклатуры, Количество
Получаем подобную таблицу:
Ном1 - Сезон1 - Харка1 - 10 шт.
Ном1 - Сезон1 - Харка2 - 5 шт.
Ном1 - Сезон1 - Харка3 - 5 шт.
Ном1 - Сезон1 - Харка4 - 1 шт.
Ном1 - Сезон2 - Харка5 - 8 шт.
Ном1 - Сезон2 - Харка6 - 3 шт.
Ном1 - Сезон2 - Харка7 - 5 шт.
Ном1 - Сезон2 - Харка8 - 4 шт.
Ном2 - Сезон1 - Харка9  - 7 шт.
Ном2 - Сезон1 - Харка10 - 7 шт.
Ном2 - Сезон1 - Харка11 - 5 шт.
Ном2 - Сезон1 - Харка12 - 4 шт.

Нужно получить по первым двум группировкам 2 максимального значения количества, но если кол-ва одинаковые то считаем их как за одно т.е.
на выходе получаем:
Ном1 - Сезон1 - Харка1 - 10 шт.
Ном1 - Сезон1 - Харка2 - 5 шт.
Ном1 - Сезон1 - Харка3 - 5 шт.

Ном1 - Сезон2 - Харка5 - 8 шт.
Ном1 - Сезон2 - Харка7 - 5 шт.

Ном2 - Сезон1 - Харка9  - 7 шт.
Ном2 - Сезон1 - Харка10 - 7 шт.
Ном2 - Сезон1 - Харка11 - 5 шт.

Понимаю как получить макс по всей таблице:

ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 2
    ВТ_Данные.Количество КАК Количество,
    ВТ_Данные.НомРод,
    ВТ_Данные.ХарактеристикаНоменклатуры,
    ВТ_Данные.Сезон
ПОМЕСТИТЬ ВТ_Максимальные    
ИЗ
    ВТ_Данные КАК ВТ_Данные

УПОРЯДОЧИТЬ ПО
    Количество УБЫВ
;
ВЫБРАТЬ
    ВТ_Данные.НомРод,
    ВТ_Данные.ХарактеристикаНоменклатуры,
    ВТ_Данные.Сезон,
    ВТ_Данные.Количество
ИЗ
    ВТ_Данные КАК ВТ_Данные
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Максимальные КАК ВТ_Максимальные
        ПО ВТ_Данные.Количество = ВТ_Максимальные.Количество

а как чтобы по по каждой группе номенклатуры родитель и сезону ума не приложу
1 lodger
 
20.07.19
10:22
в ТЗ посчитай и загрузи обратно.
2 Melcor
 
20.07.19
10:57
(1) Это самый крайний вариант, но нужно именно в запросе
3 lodger
 
20.07.19
11:04
(2) в запросе это много пакетов и множество ненужных ВТ.
сперва берешь топ каждой группе,
берешь топ2 за вычетом топ1
суммируешь топ1 и топ2 группы, берешь их по значениям.
берешь из ВТ0 то что входит в группы и не меньше по значениям.
4 Melcor
 
20.07.19
11:09
(3) Не в курил немного, можно для тупых чуть подробнее пжл
5 МихаилМ
 
20.07.19
11:09
6 Сияющий в темноте
 
20.07.19
11:12
А если взять первый маесимум,потом второй,а потом выбрать все,что по количеству больше или равно полученному второму максимуму?
7 Melcor
 
20.07.19
11:16
(5) Таки да, но работает только если мне из всей таблицы нужно получить макс значения, а мне надо макс значения харок но в каждой группе, т.е. макс харок в разрезе НомРод и Сезон
8 Melcor
 
20.07.19
11:17
И если я возьму запросом только НомРод и Сезон, то не смогу подключится левым соединением т.к. в вложенном запросе нельзя использовать ВТ