Имя: Пароль:
1C
1С v8
Помогите с запросом
,
0 jamesgold
 
14.08.19
20:49
Добрый день, прошу помочь!

Есть таблица вида:
https://ibb.co/kJhmWg4

Нужно сделать запрос к таблице, если фио повторяется нужно брать только одну строку где сумма выше.
Написал примерно такой запрос:
Выбрать
    табл.ФИО,
    Максимум(табл.СуммаПоТовару) как МаксимальнаяСумма,
    КОЛИЧЕСТВО(табл.ФИО) КАК КоличествоПовторений
ПОМЕСТИТЬ ВТ_ДублиФиоИМаксимальнаяСумма
из Справочник.Покупатели как табл
СГРУППИРОВАТЬ ПО
    табл.ФИО
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(табл.ФИО) > 1
;
Выбрать
    табл.Покупка,
    табл.ФИО,
    табл.СуммаПоТовару,
    ВТ_Дубли.МаксимальнаяСумма
из Справочник.Покупатели как табл
Левое СОЕДИНЕНИЕ ВТ_ДублиФиоИМаксимальнаяСумма как ВТ_Дубли
по (ВТ_Дубли.ФИО = табл.ФИО)

На выходе должна получиться таблица вида:
https://ibb.co/d7MTVjY

И дальше, уже при переборе результата запроса я смотрю где заполнено поле "МаксимальнаяСумма" и если оно равно полю "СуммаПоТовару" то беру только эту строку.

Вопрос, можно ли решить эту задачу на уровне запроса при условии что суммы по фамилии могут быть одинаковыми а взять все равно нужно будет только одну строчку по фамилии?
1 palsergeich
 
14.08.19
20:50
Можно
2 jamesgold
 
14.08.19
20:52
Можно поподробней?
3 palsergeich
 
14.08.19
20:53
(2) Куда подробнее?
Ты спросил можно ли сделать запросом, я говорю что да.
Мне задачу за тебя решить?)
4 RomanYS
 
14.08.19
20:55
(2) ты же уже решил. В чём проблема то?
5 jamesgold
 
14.08.19
20:56
(4) Хочу понять как это можно сделать в одном запросе
6 palsergeich
 
14.08.19
20:57
(5) Так у тебя один запрос.
7 RomanYS
 
14.08.19
20:58
(5) согласен с (6)
8 jamesgold
 
14.08.19
20:59
Я дальше перебираю эти записи и отсеиваю лишние, а хотелось на уровне запроса отсеять не нужные записи
9 palsergeich
 
14.08.19
21:01
(8) Если ты хочешь решить без 2го пакета в одном запросе то жди
https://wonderland.v8.1c.ru/blog/podderzhka-grouping-sets-v-yazyke-zaprosov/
10 RomanYS
 
14.08.19
21:02
(8) покажи что получается и что хочешь получить
11 jamesgold
 
14.08.19
21:04
(10) Кода в 1с нет пока, просто наброски в блокноте сделал и сюда скинул
12 palsergeich
 
14.08.19
21:04
(9) Хотя это скорее всего не то, что нужно тебе.
Есть идея как это сделать одним пакетом, но нет времени на вбитие
13 jamesgold
 
14.08.19
21:06
(10) Хочу получить по этой таблице
https://ibb.co/kJhmWg4
в случае дубля фио только ту строчку где сумма максимальная
14 jamesgold
 
14.08.19
21:07
(12) Схематично можешь рассказать?
15 RomanYS
 
14.08.19
21:08
(11) Э, не понял. Проблема уже есть? Судя по описанию(точнее по моему пониманию описания) твой запрос решает задачу (как я ее понял).
(13) яснее не стало. Это ссылка на исходную таблицу
16 jamesgold
 
14.08.19
21:09
(15) Мой запрос не отсеивает лишние строки
17 RomanYS
 
14.08.19
21:09
(16) Может ты объяснишь какие "лишние"?
18 jamesgold
 
14.08.19
21:11
(17) Если фамилия в таблице дублируется, то брать нужно не все строки с этой фамилией одну строку где сумма максимальная
19 Kashey
 
14.08.19
21:17
Сгруппировать по Фамилии, вычислить максимум по сумме. Поместить в ВТ
Внутренним соединением ВТ и справочника по фамилии и сумме вывести продажу и поля из ВТ
20 RomanYS
 
14.08.19
21:21
(18) Понятно. Видно не судьба на друг друга понять(
21 jamesgold
 
14.08.19
21:22
(19) Если суммы одинаковые у двух строчек по одной фамилии?
22 Kashey
 
14.08.19
21:26
(21) Ну тогда нужно понимать какую из продаж мы хотим оставить в этом случае, самую раннюю по дате или ещё какие условия
23 jamesgold
 
14.08.19
21:28
(22) Не условий, любую продажу, - но одну
24 Kashey
 
14.08.19
21:30
(23) Тогда какая разница, если выводится максимум по продаже конкретному покупателю в любом случае
25 RomanYS
 
14.08.19
21:35
(21) загугли "коррелированный запрос 1с". Вероятно это решает твою задачу без двух и более соединений
26 jamesgold
 
14.08.19
21:35
(24) Так при внутреннем соединении ВТ со справочником из справочника возьмутся две строки по одной фамилии, т.к. такие фио и сумма будет в обоих строчках
27 Kashey
 
14.08.19
21:40
(27) Ну помести результат в ещё одну ВТ, да сгруппируй по фамилии, сумме, и максимум по продаже
28 jamesgold
 
14.08.19
21:43
(27) Не получиться сгруппировать т.к. есть еще поле "Покупка", видишь они разные для одной фамилии
29 Kashey
 
14.08.19
21:45
(28)>>и максимум по продаже
Имелась в виду агрегатная функция к полю "Покупка". В твоём случае без разницы минимум или максимум
30 jamesgold
 
14.08.19
21:54
(25) Посмотрел, спасибо что то в этом есть.
(29) Не группирует строки я пишу максимум(покупка), все равно две строчки останется на выходе.
31 Kashey
 
14.08.19
22:03
(30) Текст своего запроса покажи
32 jamesgold
 
14.08.19
22:03
(29) Получилось, визуально все красиво. Но по смыслу не правильно т.к. он покупку взял взял по максимуму - не ту которая была где сумма больше
33 RomanYS
 
14.08.19
22:06
(32) у тебя должно быть два пакета, два соединения и две группировки. Ты похоже где-то упростил)
34 jamesgold
 
14.08.19
22:08
(31) ВЫБРАТЬ
    Учет.ФИО,
    МАКСИМУМ(Учет.СуммаПокупки) КАК СуммаПокупки,
    КОЛИЧЕСТВО(Учет.ФИО) КАК ФИО1,
    МАКСИМУМ(Учет.Покупка) КАК Покупка
ИЗ
    РегистрСведений.Учет КАК Учет

СГРУППИРОВАТЬ ПО
    Учет.ФИО

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Учет.ФИО) > 1

Здесь просто первая таблица  -получаю только где дубли фамилий
35 Kashey
 
14.08.19
22:14
ВЫБРАТЬ  
    Учет.ФИО,
    МАКСИМУМ(Учет.СуммаПокупки) КАК СуммаПокупки,
ИЗ
    РегистрСведений.Учет КАК Учет

СГРУППИРОВАТЬ ПО
    Учет.ФИО

Вот это поместить в ВТ, в первом пакете
36 jamesgold
 
14.08.19
22:19
(35) Так сматри при внутреннем соединении когда по одной фамилии будет несколько строк но сумма будет одинаковая, он оставит все строчки во второй таблице по этой фамилии, а сгруппировать вторую таблицу не получиться т.к.  в поле покупка разные значения у строк с одной фамилией
37 jamesgold
 
14.08.19
22:21
(36) если брать максимум он берет не ту покупку, где сумма выше
38 Kashey
 
14.08.19
22:31
>>будет несколько строк но сумма будет одинаковая
>>берет не ту покупку, где сумма выше

Если сумма одинаковая(максимум по конкретному покупателю) пусть даже несколько продаж по нему с одинаковой суммой , то откуда возьмётся сумма выше?
39 breezee
 
15.08.19
05:11
Во втором пакете добавь Различные
40 jamesgold
 
15.08.19
07:25
(38) Спасибо!! Понял идею попробую.  
(39) В поле покупка разные значения, различные не поможет
2 + 2 = 3.9999999999999999999999999999999...