Вход | Регистрация
 

Простой запрос по максимуму. Вроде написал, но как-то коряво.

Простой запрос по максимуму. Вроде написал, но как-то коряво.
Я
   Галахад
 
08.04.19 - 10:24
Пример. Допустим нужно выбрать из табличной части документа "Номенклатуру" у которой "Сумма" самая большая.
Накропал вот так. Можно как-то улучшить?

ВЫБРАТЬ
    ЧекККМТовары.Ссылка,
    МАКСИМУМ(ЧекККМТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ Т
ИЗ
    Документ.ЧекККМ.Товары КАК ЧекККМТовары
ГДЕ
    ЧекККМТовары.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т.Ссылка,
    Т.Сумма,
    ЧекККМТовары.Номенклатура
ИЗ
    Т КАК Т
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
        ПО Т.Сумма = ЧекККМТовары.Сумма
            И Т.Ссылка = ЧекККМТовары.Ссылка
 
 
   Ёпрст
 
1 - 08.04.19 - 10:28
(0) в первом запросе выкинуит из селекта ссылку и группировку по ней
   Ёпрст
 
2 - 08.04.19 - 10:29
во втором запросе поставить условие на ссылка
   Fram
 
3 - 08.04.19 - 10:29
Все верно вроде. Что не нравится?
   Ёпрст
 
4 - 08.04.19 - 10:30
и выкинуть из условия соединения условие на  ссылка
   RomanYS
 
5 - 08.04.19 - 10:31
(0) Если таких строк несколько, возвращаться должна одна или все?
   ДенисЧ
 
6 - 08.04.19 - 10:32
(4) А если будет несколько чеков с одинаковой суммой?
   RomanYS
 
7 - 08.04.19 - 10:32
(0) Если есть условие  = &Ссылка, то лучше выбрать первые 1
   Галахад
 
8 - 08.04.19 - 10:34
(2) Это пример. В реальности не будет условия по конкретной ссылке.

(3) Работать-то работает. Но может и другие варианты есть?

(5) Вообще одну. Но это пока не существенно.
   Ёпрст
 
9 - 08.04.19 - 10:34
(6) он всё равно в условии в первом запросе на 1 чек
   unregistered
 
10 - 08.04.19 - 10:35
Почему группировка должна работать быстрее банального ВЫБРАТЬ ПЕРВЫЕ 1 ИЗ ... УПОРЯДОЧИТЬ ПО Сумма?
   unregistered
 
11 - 08.04.19 - 10:37
Или я чего-то не понял, или запрос в (0) вообще никаким боком не относится к сформулированной задаче. Но тогда почему только я это вижу?
   Галахад
 
12 - 08.04.19 - 10:38
(11) Может я не четко сформулировал задачу?
   unregistered
 
13 - 08.04.19 - 10:38
к (10)* "УБЫВ" забыл.
...УПОРЯДОЧИТЬ ПО Сумма УБЫВ.
   Галахад
 
14 - 08.04.19 - 10:39
Убрал условие из первого запроса. Оно видимо смущает...

ВЫБРАТЬ
    ЧекККМТовары.Ссылка, 
    МАКСИМУМ(ЧекККМТовары.Сумма) КАК Сумма 
ПОМЕСТИТЬ Т 
ИЗ 
    Документ.ЧекККМ.Товары КАК ЧекККМТовары 


СГРУППИРОВАТЬ ПО 
    ЧекККМТовары.Ссылка 
; 

//////////////////////////////////////////////////////////////////////////////// 

ВЫБРАТЬ 
    Т.Ссылка, 
    Т.Сумма, 
    ЧекККМТовары.Номенклатура
ИЗ 
    Т КАК Т 
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары 
        ПО Т.Сумма = ЧекККМТовары.Сумма 
            И Т.Ссылка = ЧекККМТовары.Ссылка
   RomanYS
 
15 - 08.04.19 - 10:41
(8) >> Вообще одну. Но это пока не существенно.
Момент достаточно принципиальный, чтобы потом (когда станет существенно) это разрулить будешь костыли пристраивать.

Ещё вопрос: может ли в одном чеке быть одна номенклатура в нескольких строках?
   unregistered
 
16 - 08.04.19 - 10:42
(12) Я же не знаю что именно тебе нужно. Но запрос точно не выбирает самую большую по сумме номенклатуру. Он тупо сгруппирует строки с одинаковыми номенклатурами (если такие вообще будут в чеке) оставив максимальные суммы. Ну типа если есть чек с двумя строками "Номенклатура1" но с разными суммами, то в результате этого запроса останется одна строка с "Номенклатура1" с наибольшей суммой.
   RomanYS
 
17 - 08.04.19 - 10:44
(16) ненене. Перечитай. Нет там группировки по номенклатуре, только по документу.
   Галахад
 
18 - 08.04.19 - 10:46
(15) Хорошо. Ответ: несколько.

(16) Спасибо, что поправил. Мне нужно в каждом документе выбрать "Номенклатуру" с максимальной "Суммой"
   unregistered
 
19 - 08.04.19 - 10:46
(17) Ааааа. Увидел! Извиняюсь.
   trad
 
20 - 08.04.19 - 10:48
(14)
ВЫБРАТЬ
    ЧекККМТовары.Ссылка, 
    МАКСИМУМ(ЧекККМТовары.Сумма) КАК Сумма 
ПОМЕСТИТЬ Т 
ИЗ 
    Документ.ЧекККМ.Товары КАК ЧекККМТовары 


СГРУППИРОВАТЬ ПО 
    ЧекККМТовары.Ссылка 
; 

//////////////////////////////////////////////////////////////////////////////// 


ВЫБРАТЬ 
    Т.Ссылка, 
    МИНИМУМ(ЧекККМТовары.НомерСтроки) НомерСтроки
ПОМЕСТИТЬ Т2
ИЗ 
    Т КАК Т 
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары 
        ПО Т.Сумма = ЧекККМТовары.Сумма 
            И Т.Ссылка = ЧекККМТовары.Ссылка
СГРУППИРОВАТЬ ПО 
    Т.Ссылка

//////////////////////////////////////////////////////////////////////////////// 


ВЫБРАТЬ 
    Т.Ссылка, 
    ЧекККМТовары.Сумма, 
    ЧекККМТовары.Номенклатура 
ИЗ 
    Т2 КАК Т 
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары 
        ПО Т.НомерСтроки = ЧекККМТовары.НомерСтроки
            И Т.Ссылка = ЧекККМТовары.Ссылка
   trad
 
21 - 08.04.19 - 10:49
(20) если в чеке несколько максимальных сумм, то получить первую
   _Дайвер_
 
22 - 08.04.19 - 10:52
(10) +
   Галахад
 
23 - 08.04.19 - 10:55
Понятно. Всем спасибо.


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