Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Получить несколько максимальных значений в запросе с группировкой

Получить несколько максимальных значений в запросе с группировкой
Я
   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
    ВТ_Данные.Количество КАК Количество,
    ВТ_Данные.НомРод,
    ВТ_Данные.ХарактеристикаНоменклатуры,
    ВТ_Данные.Сезон
ПОМЕСТИТЬ ВТ_Максимальные    
ИЗ
    ВТ_Данные КАК ВТ_Данные

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.