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

Помогите с запросом

Помогите с запросом
Я
   jamesgold
 
14.08.19 - 20:49
Добрый день, прошу помочь!

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

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

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

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

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

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

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

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

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

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

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


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