Игнорирование поля в группировке

1. user2097013 23.07.24 20:48 Сейчас в теме
У меня есть регистр сведений, в нем три измерения. Я создал таблицу в которой все данные из регистра, а так же напротив них число, которое обозначает приоритет. Мне нужно вывести следующее: если есть строки в которых одинаковые первые два измерения, то нужно выбирать ту строку у которой максимальное число, а так же нужно вывести 3 измерения которое соответствует выбранной строке.

Я пытался сделать это таким запросом, однако добавление третьего измерения дублирует строки в результате.

ВЫБРАТЬ
    НормДаты.Контрагент КАК Контрагент,
    НормДаты.Дистрибутив КАК Дистрибутив,
    МАКСИМУМ(НормДаты.Приоритет) КАК Приоритет
ИЗ
    (ВЫБРАТЬ
        СкидкиСистем.Период КАК Период,
        СкидкиСистем.Контрагент КАК Контрагент,
        СкидкиСистем.Дистрибутив КАК Дистрибутив,
        ВЫБОР
            КОГДА СкидкиСистем.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
                ТОГДА ДАТАВРЕМЯ(3000, 1, 1)
            ИНАЧЕ СкидкиСистем.ДатаОкончания
        КОНЕЦ КАК ДатаОкончания,
        ВЫБОР
            КОГДА СкидкиСистем.Скидка В (&Проценты)
                ТОГДА 1
            КОГДА СкидкиСистем.Скидка В (&Предоплаты)
                ТОГДА 2
        КОНЕЦ КАК Приоритет,
        СкидкиСистем.ТипСкидки КАК ТипСкидки
    ИЗ
        РегистрСведений.СкидкиСистем КАК СкидкиСистем) КАК НормДаты
ГДЕ
    НормДаты.ДатаОкончания > &ДатаВыбранная
    И НормДаты.Период < &ДатаВыбранная

СГРУППИРОВАТЬ ПО
    НормДаты.Контрагент,
    НормДаты.Дистрибутив
Показать
По теме из базы знаний
Найденные решения
2. Sashares 35 24.07.24 06:40 Сейчас в теме
(1) Поместить данные регистра во временную таблицу Т1.
Взять данные временной таблицы, сгруппировать по 2м измерениям и максимум по приоритету, положить в Т2.
Соединить Т2 с Т1 левым соединением по 2 измерениям и приоритету, чтобы получить из Т1 третье измерение.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 24.07.24 06:40 Сейчас в теме
(1) Поместить данные регистра во временную таблицу Т1.
Взять данные временной таблицы, сгруппировать по 2м измерениям и максимум по приоритету, положить в Т2.
Соединить Т2 с Т1 левым соединением по 2 измерениям и приоритету, чтобы получить из Т1 третье измерение.
3. user2097013 24.07.24 07:18 Сейчас в теме
(2)
Вообщем все как вы сказали, нужно сначала выбрать данные которые нужны, сделать группировку по двум измерениям контрагент и система и затем добавить приоритет к выборке. ЗАтем надо добавить приоритет ко всем изначальным данным, после чего сделать внутреннее соединение по по всем начальным данным и выборке при условии равенства приоритета и двух измерений.
ВЫБРАТЬ
    НормДаты.Контрагент КАК Контрагент,
    НормДаты.Дистрибутив КАК Дистрибутив,
    МАКСИМУМ(НормДаты.Приоритет) КАК Приоритет
ИЗ
    (ВЫБРАТЬ
        СкидкиСистем.Период КАК Период,
        СкидкиСистем.Контрагент КАК Контрагент,
        СкидкиСистем.Дистрибутив КАК Дистрибутив,
        ВЫБОР
            КОГДА СкидкиСистем.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
                ТОГДА ДАТАВРЕМЯ(3000, 1, 1)
            ИНАЧЕ СкидкиСистем.ДатаОкончания
        КОНЕЦ КАК ДатаОкончания,
        ВЫБОР
            КОГДА СкидкиСистем.Скидка В (&Проценты)
                ТОГДА 1
            КОГДА СкидкиСистем.Скидка В (&Предоплаты)
                ТОГДА 2
        КОНЕЦ КАК Приоритет,
        СкидкиСистем.ТипСкидки КАК ТипСкидки
    ИЗ
        РегистрСведений.СкидкиСистем КАК СкидкиСистем) КАК НормДаты
ГДЕ
    НормДаты.ДатаОкончания > &ДатаВыбранная
    И НормДаты.Период < &ДатаВыбранная

СГРУППИРОВАТЬ ПО
    НормДаты.Контрагент,
    НормДаты.Дистрибутив
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот