Добрый день. Подскажите как решить не совсем тривиальную задачку.
В запросе есть временная таблица с данными и мне необходимо получить первые несколько максимальных значений. т.е.
(42) Упс. подтер "Поместить ВТ_Данные" в первом пакете. Должно быть:
ВЫБРАТЬ "Тов1" КАК Товар, 3 КАК Количество
ПОМЕСТИТЬ ВТ_Данные
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов2", 7
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов3", 10
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов4", 5
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов5", 6
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов6", 10
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов7", 1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 5
ВТ_Данные.Количество КАК Количество
ПОМЕСТИТЬ ВТ_Максимальные
ИЗ
ВТ_Данные КАК ВТ_Данные
УПОРЯДОЧИТЬ ПО
Количество УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Данные.Товар,
ВТ_Данные.Количество
ИЗ
ВТ_Данные КАК ВТ_Данные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Максимальные КАК ВТ_Максимальные
ПО ВТ_Данные.Количество = ВТ_Максимальные.Количество
(1) То есть вам не важна информация Тов3 или Тов6...?
Тогда группируйте сначала по значению , свернутся одинаковые 10,
Сортируйте опять же по значяениям с убыванием и берите первые 5.
Все.....
(1)Я бы как нибудь так решил эту задачу
Справочник товаров и РН остатков поменяйте на ваши значения.
ВЫБРАТЬ ПЕРВЫЕ 5
Товары.Наименование КАК Наименование,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
ПО (СвободныеОстаткиОстатки.Номенклатура = Товары.Ссылка)
СГРУППИРОВАТЬ ПО
Товары.Наименование,
СвободныеОстаткиОстатки.ВНаличииОстаток
УПОРЯДОЧИТЬ ПО
ВНаличииОстаток УБЫВ
Учитывая что виртуальная таблица "Остатки" по-умолчанию максимально сгруппирована, то группировку вы лишнюю прилепили. Можно тогда только сортировку сразу ставить.
Нужно именно получить 5 ссылок на товары у которых максимальное количество товара? Или нужно просто получить первые 5 цифр "КоличествоОстаток" которые будут не повторяющимися и максимальными по отношению ко всем следующим?
(13)посмотрите на время созданных предложений, оно практически совпадает, и когда я вставлял ответ сообщений еще не было а теме... сорри, если вас это раздражает...
(11)выполните запрос а затем поместите его в таблицу
А если хотите очень помощи, то можно было бы и запрос в студию... а то по ходу предложений вы изменяете условия...
(11)
Тупой вариант - получаем максимальное значение, потом с ним левое соединение основной таблицы с отбором по полю левой таблицы равному NULL. Дальше снова то же самое, так 5 раз. Так получим 5 таблиц с максимальными значениями. Ну а потом уже с ними соединять основную таблицу.
(11) к вашему сведению Временные таблицы прекрасно упорядочиваются...!!
Вот например прекрасно работает
ВЫБРАТЬ первые 1000
Номенклатура.Ссылка КАК Номенклатура,
Номенклатура.Ссылка.Наименование Как Нам
ПОМЕСТИТЬ ВТ
ИЗ
Справочник.Контрагенты КАК Номенклатура
УПОРЯДОЧИТЬ ПО Нам Убыв
;
Показать
Вместо 1000 поставьте любое число гарантированно превышающее число ваших записей
Кучей является таблица без кластеризованного индекса. Для таблиц, сохраненных как куча, может быть создан один или несколько некластеризованных индексов. Данные хранятся в куче без указания порядка. Обычно данные первоначально сохраняются в порядке, в котором строки вставлены в таблицу, но компонент Компонент Database Engine может перемещать данные в куче для более эффективного хранения строк. Поэтому порядок данных нельзя прогнозировать. Чтобы гарантировать порядок строк, возвращаемых из кучи, необходимо использовать предложение ORDER BY. Чтобы указать постоянный логический порядок хранения строк, создайте кластеризованный индекс для таблицы, чтобы таблица не была кучей.
ВЫБРАТЬ Максимум(ВТ_Исх.Значение) КАК Значение ПОМЕСТИТЬ ВТ_Макс1 ИЗ ВТ_Исх;
ВЫБРАТЬ * ПОМЕСТИТЬ ВТ_БезМакс1 ИЗ ВТ_ИСХ Левое Соединение ВТ_Макс1 ПО ВТ_ИСХ.Значение = ВТ_Макс1.Значение ГДЕ ВТ_Макс1.Значение ЕСТЬ NULL;
ВЫБРАТЬ Максимум(ВТ_БезМакс1 .Значение) КАК Значение ПОМЕСТИТЬ ВТ_Макс2 ИЗ ВТ_БезМакс1 ;
ВЫБРАТЬ * ПОМЕСТИТЬ ВТ_БезМакс2 ИЗ ВТ_БезМакс1 Левое Соединение ВТ_Макс2 ПО ВТ_БезМакс1 .Значение = ВТ_Макс2 .Значение ГДЕ ВТ_Макс2 .Значение ЕСТЬ NULL;
...
...
...
ВЫБРАТЬ * ИЗ ВТ_Исх ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Макс1 ПО ВТ_ИСХ.Значение = ВТ_Макс1.Значение
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ * ИЗ ВТ_Исх ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Макс2 ПО ВТ_ИСХ.Значение = ВТ_Макс2.Значение
...
...
...
(19) Не понял что значит 6, 8 или 100?
Мы выбрали 5 максимальных значений, потом соединили с основной таблицей, получили хоть тысячу строк, но значения у всех будут 5-ю максимальными.
Итоговый запрос. Где после пятого максимума по найденным числам ищзем сроки. Елси это надо
ВЫБРАТЬ
ВЫРАЗИТЬ(Товары.Товар КАК Строка(20)) КАК Товар,
Товары.Количество КАК Количество
ПОМЕСТИТЬ ВТ_ИсходнаяТаблица
ИЗ
&Товары КАК Товары
;
ВЫБРАТЬ
МАКСИМУМ(ВТ_ИсходнаяТаблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ПервыйМаксимум
Из
ВТ_ИсходнаяТаблица КАК ВТ_ИсходнаяТаблица
;
ВЫБРАТЬ
МАКСИМУМ(ВТ_ИсходнаяТаблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ВторойМаксимум
ИЗ
ВТ_ИсходнаяТаблица КАК ВТ_ИсходнаяТаблица
ГДЕ
НЕ ВТ_ИсходнаяТаблица.Количество В (Выбрать ВТ_ПервыйМаксимум.Количество из ВТ_ПервыйМаксимум КАК ВТ_ПервыйМаксимум)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВТ_ПервыйМаксимум.Количество КАК Количество
Из
ВТ_ПервыйМаксимум КАК ВТ_ПервыйМаксимум
;
ВЫБРАТЬ
МАКСИМУМ(ВТ_ИсходнаяТаблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ТретийМаксимум
ИЗ
ВТ_ИсходнаяТаблица КАК ВТ_ИсходнаяТаблица
ГДЕ
НЕ ВТ_ИсходнаяТаблица.Количество В (Выбрать ВТ_ВторойМаксимум.Количество из ВТ_ВторойМаксимум КАК ВТ_ВторойМаксимум)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВТ_ВторойМаксимум.Количество КАК Количество
Из
ВТ_ВторойМаксимум КАК ВТ_ВторойМаксимум
;
ВЫБРАТЬ
МАКСИМУМ(ВТ_ИсходнаяТаблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ЧетвертыйМаксимум
ИЗ
ВТ_ИсходнаяТаблица КАК ВТ_ИсходнаяТаблица
ГДЕ
НЕ ВТ_ИсходнаяТаблица.Количество В (Выбрать ВТ_ТретийМаксимум.Количество из ВТ_ТретийМаксимум КАК ВТ_ТретийМаксимум)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВТ_ТретийМаксимум.Количество КАК Количество
Из
ВТ_ТретийМаксимум КАК ВТ_ТретийМаксимум
;
ВЫБРАТЬ
МАКСИМУМ(ВТ_ИсходнаяТаблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ПятыйМаксимум
ИЗ
ВТ_ИсходнаяТаблица КАК ВТ_ИсходнаяТаблица
ГДЕ
НЕ ВТ_ИсходнаяТаблица.Количество В (Выбрать ВТ_ЧетвертыйМаксимум.Количество из ВТ_ЧетвертыйМаксимум КАК ВТ_ЧетвертыйМаксимум)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВТ_ЧетвертыйМаксимум.Количество КАК Количество
Из
ВТ_ЧетвертыйМаксимум КАК ВТ_ЧетвертыйМаксимум
;
ВЫБРАТЬ
ВТ_ПятыйМаксимум.Количество Количество,
ВТ_ИсходнаяТаблица.Товар КАК Товар
Из
ВТ_ПятыйМаксимум КАК ВТ_ПятыйМаксимум
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИсходнаяТаблица КАК ВТ_ИсходнаяТаблица
ПО ВТ_ИсходнаяТаблица.Количество = ВТ_ПятыйМаксимум.Количество
выбрать
Товары.Товар КАК Товар,
Товары.Количество КАК Количество
ПОМЕСТИТЬ ВТ_ТАБ
Из
&Товары КАК Товары
;
Выбрать
МАКСИМУМ(ВТ_Таблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ПервыйМаксимум
Из
ВТ_ТАБ КАК ВТ_Таблица
;
Выбрать
МАКСИМУМ(ВТ_Таблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ВторойМаксимум
Из
ВТ_ТАБ КАК ВТ_Таблица
ГДЕ
НЕ ВТ_Таблица.Количество В (Выбрать ВТ_ПервыйМаксимум.Количество из ВТ_ПервыйМаксимум КАК ВТ_ПервыйМаксимум)
ОБЪЕДИНИТЬ
Выбрать
ВТ_ПервыйМаксимум.Количество КАК Количество
Из
ВТ_ПервыйМаксимум КАК ВТ_ПервыйМаксимум
;
Выбрать
МАКСИМУМ(ВТ_Таблица.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ТретийМаксимум
Из
ВТ_ТАБ КАК ВТ_Таблица
ГДЕ
НЕ ВТ_Таблица.Количество В (Выбрать ВТ_ВторойМаксимум.Количество из ВТ_ВторойМаксимум КАК ВТ_ВторойМаксимум)
ОБЪЕДИНИТЬ
Выбрать
ВТ_ВторойМаксимум.Количество КАК Количество
Из
ВТ_ВторойМаксимум КАК ВТ_ВторойМаксимум
(32) Значит вы не умеете использовать ВСЕ возможности 1С запросов!
Где написано в условии , что нельзя применить
ВЫБРАТЬ ПЕРВЫЕ 1000000000000000000000000000 ???
Вот то же...
Хахахаха. Суть в том что вы хоть триллиард первых используйте, прикол у задачи в том что строки с количеством 10 должно получиться две). Потому что одинаковые "максималки" надо накапливать. Это отсекает ИМХО смысл использования ПЕРВЫЕ, хотя может его можно еще как то для этой задачи применить, но с группировкой он не даст результат, который нужен по условию. Однако, посмотрим. ТС в итоге рассудит).
Цитата:
Нужно получить первые 5 максимальных значений, но если какие-то значения повторяются, то значит уже не 5, а 6, как в примере выше
(35) Вы банально еще и читать не умеете!
Я же сказал ВЫПОЛНИТЕ запрос из (30) не с потолка а из (30)!!!
там и картинки есть для тех кто не умеет консолью пользоваться...
Но повторю картинку с 6 строками в Результате
(40) Да спасибо...
Я просто очень люблю именно левые соединения. С ними все ясно и подконтрольно и можно увидеть при разработке что будем отбрасывать, а внутреннее недолюбливаю.
Но безусловно ВНУТРЕННЕЕ - верно
(39) Да не это так ерунда. Если тут соединить наоборот, то на Нулл проверка будет не нужна.
ВЫБРАТЬ ПЕРВЫЕ 10000000000
ВТ_Исходная.ТОВ КАК ТОВ,
ВТ_УПОРЯДОЧЕННАЯ.Значение КАК Значение
ПОМЕСТИТЬ ВТ_РЕЗУЛЬТАТ
ИЗ
ВТ_УПОРЯДОЧЕННАЯ КАК ВТ_УПОРЯДОЧЕННАЯ
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Исходная КАК ВТ_Исходная
ПО (ВТ_УПОРЯДОЧЕННАЯ.Значение = ВТ_Исходная.Значение)
УПОРЯДОЧИТЬ ПО
ВТ_Исходная.ТОВ
ВЫБРАТЬ
"Тов1" КАК ТОВ,
3 КАК Значение
ПОМЕСТИТЬ ВТ_Исходная
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ первые 1000
"Тов2" КАК ТОВ,
7 КАК Значение
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ первые 1000
"Тов3" КАК ТОВ,
10 КАК Значение
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ первые 1000
"Тов4" КАК ТОВ,
5 КАК Значение
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ первые 1000
"Тов5" КАК ТОВ,
6 КАК Значение
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ первые 1000
"Тов6" КАК ТОВ,
10 КАК Значение
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ первые 1000
"Тов7" КАК ТОВ,
1 КАК Значение
;
Выбрать ПЕРВЫЕ 5
МАКСИМУМ(ТОВ) КАК ТОВ,
Значение
ПОМЕСТИТЬ ВТ_УПОРЯДОЧЕННАЯ
Из ВТ_Исходная
СГРУППИРОВАТЬ ПО Значение
УПОРЯДОЧИТЬ ПО Значение УБЫВ
ВЫБРАТЬ
"Тов1" КАК ТОВ,
3 КАК Значение
ПОМЕСТИТЬ ВТ_Исходная
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Тов2",
7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Тов3",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Тов4",
5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Тов5",
6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Тов6",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Тов7",
1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 5
МАКСИМУМ(ВТ_Исходная.ТОВ) КАК ТОВ,
ВТ_Исходная.Значение КАК Значение
ПОМЕСТИТЬ ВТ_УПОРЯДОЧЕННАЯ
ИЗ
ВТ_Исходная КАК ВТ_Исходная
СГРУППИРОВАТЬ ПО
ВТ_Исходная.Значение
УПОРЯДОЧИТЬ ПО
ВТ_Исходная.Значение УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 10000000000
ВТ_Исходная.ТОВ КАК ТОВ,
ВТ_Исходная.Значение КАК Значение
ПОМЕСТИТЬ ВТ_РЕЗУЛЬТАТ
ИЗ
ВТ_Исходная КАК ВТ_Исходная
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УПОРЯДОЧЕННАЯ КАК ВТ_УПОРЯДОЧЕННАЯ
ПО (ВТ_УПОРЯДОЧЕННАЯ.Значение = ВТ_Исходная.Значение)
ГДЕ ВТ_УПОРЯДОЧЕННАЯ.Значение IS NOT NULL
УПОРЯДОЧИТЬ ПО
ВТ_Исходная.ТОВ
ВЫБРАТЬ "Тов1" КАК Товар, 3 КАК Количество
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов2", 7
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов3", 10
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов4", 5
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов5", 6
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов6", 10
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов7", 1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 5
ВТ_Данные.Количество КАК Количество
ПОМЕСТИТЬ ВТ_Максимальные
ИЗ
ВТ_Данные КАК ВТ_Данные
УПОРЯДОЧИТЬ ПО
Количество УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Данные.Товар,
ВТ_Данные.Количество
ИЗ
ВТ_Данные КАК ВТ_Данные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Максимальные КАК ВТ_Максимальные
ПО ВТ_Данные.Количество = ВТ_Максимальные.Количество
(44) Действительно.
Одно замечание
В Вашем примере
"МАКСИМУМ(ВТ_Исходная.ТОВ) КАК ТОВ," - совершенно лишнее
Это где Вы создаёте временную таблицу "ВТ_УПОРЯДОЧЕННАЯ"
Также "ПЕРВЫЕ 10000000000" не нужно в последнем пакете, где создается временная таблица "ВТ_РЕЗУЛЬТАТ"
(45) Ваш вариант тоже хорош!
Он еще проще моего ...
Я исходил, чтобы в Упорядоченной таблице хоть как-то сохранить значения Тов (на всякий случай).
Но если оно не нужно, то конечно можно еще упростить по вашему
(42) Упс. подтер "Поместить ВТ_Данные" в первом пакете. Должно быть:
ВЫБРАТЬ "Тов1" КАК Товар, 3 КАК Количество
ПОМЕСТИТЬ ВТ_Данные
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов2", 7
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов3", 10
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов4", 5
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов5", 6
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов6", 10
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тов7", 1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 5
ВТ_Данные.Количество КАК Количество
ПОМЕСТИТЬ ВТ_Максимальные
ИЗ
ВТ_Данные КАК ВТ_Данные
УПОРЯДОЧИТЬ ПО
Количество УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Данные.Товар,
ВТ_Данные.Количество
ИЗ
ВТ_Данные КАК ВТ_Данные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Максимальные КАК ВТ_Максимальные
ПО ВТ_Данные.Количество = ВТ_Максимальные.Количество
Нужно получить по первым двум группировкам 2 максимального значения количества, но если кол-ва одинаковые то считаем их как за одно т.е.
на выходе получаем:
Ном1 - Сезон1 - Харка1 - 10 шт.
Ном1 - Сезон1 - Харка2 - 5 шт.
Ном1 - Сезон1 - Харка3 - 5 шт.
Тогда вам нужно получить максимум два раза.
1) просто максимум с группировкой.
2) максимум с группировкой, но меньше первого. (см. после "объединить" в третьем пакете.
Условие соединения : "И ВТ_Данные.Количество < ВТ_Максимум.Количество" как раз для получения предмаксимального значения)
Затем исходные данные соеднинить по группировочным полям и количеству (максимальное и предмаксимальное).
Всё вместе будет выглядеть примерно так:
выбрать "Ном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
;
ВЫБРАТЬ
ВТ_Данные.РодительНом,
ВТ_Данные.Сезон,
МАКСИМУМ(ВТ_Данные.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_Максимум
ИЗ
ВТ_Данные КАК ВТ_Данные
СГРУППИРОВАТЬ ПО
ВТ_Данные.РодительНом,
ВТ_Данные.Сезон
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Максимум.РодительНом,
ВТ_Максимум.Сезон,
ВТ_Максимум.Количество
ПОМЕСТИТЬ ВТ_НужныеКоличества
ИЗ
ВТ_Максимум КАК ВТ_Максимум
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВТ_Данные.РодительНом,
ВТ_Данные.Сезон,
МАКСИМУМ(ВТ_Данные.Количество)
ИЗ
ВТ_Данные КАК ВТ_Данные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Максимум КАК ВТ_Максимум
ПО ВТ_Данные.РодительНом = ВТ_Максимум.РодительНом
И ВТ_Данные.Сезон = ВТ_Максимум.Сезон
И ВТ_Данные.Количество < ВТ_Максимум.Количество
СГРУППИРОВАТЬ ПО
ВТ_Данные.РодительНом,
ВТ_Данные.Сезон
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Данные.РодительНом,
ВТ_Данные.Сезон,
ВТ_Данные.ХарактеристикаНоменклатуры,
ВТ_Данные.Количество
ИЗ
ВТ_Данные КАК ВТ_Данные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НужныеКоличества КАК ВТ_НужныеКоличества
ПО ВТ_Данные.РодительНом = ВТ_НужныеКоличества.РодительНом
И ВТ_Данные.Сезон = ВТ_НужныеКоличества.Сезон
И ВТ_Данные.Количество = ВТ_НужныеКоличества.Количество