Имя: Пароль:
1C
1C 7.7
v7: Как указать группировку в запросе
0 LisaAlisa
 
10.09.18
16:57
Добрый день!
Колонки таблицы:
МПЗ, Цена, ПозицияДокумента.
Как выбрать SQL-запросом МПЗ и ЦЕНУ по максимальному значению колонки "ПозицияДокумента"
1 Sserj
 
10.09.18
17:30
select top 1 МПЗ,Цена FROM table ORDER BY ПозицияДокумента DESC
2 LisaAlisa
 
10.09.18
20:03
(1) не подойдет, так как будет возвращена первая срока, а в таблице много МПЗ.
3 Cool_Profi
 
10.09.18
20:05
select мпз, цена, max(ПозицияДокумента)
...
group by мпз, цена
4 LisaAlisa
 
10.09.18
20:40
(3) Цена разная, группировка по ней не прокатит
5 Sserj
 
11.09.18
05:06
(2) Ну просто не совсем понятная трактовка вопроса была.
Т.е. нужна последня цена всех МПЗ. Тогда получается так:

SELECT
  table.МПЗ, table.Цена, table.ПозицияДокумента
FROM
  table inner join
    (SELECT МПЗ,max(ПозицияДокумента) as Документ
    FROM table GROUP BY МПЗ) as МПЗДокумент
  ON (table.МПЗ = МПЗДокумент.МПЗ
      and table.ПозицияДокумента = МПЗДокумент.Документ)
6 Sserj
 
11.09.18
05:18
(4) А вот это кстати зависит от диалекта sql.
Если убрать из группировки Цена:

select мпз, цена, max(ПозицияДокумента)
from table
group by МПЗ

То SQL Server заругается на поле вне группировки. А к примеру Postgress или SQLite выдадут цену именно из строки которая вошла в агрегатную функцию, т.е. будет выдана цена именно максимальной позиции документа.
7 trdm
 
11.09.18
05:28
(2) Все он правильно написал, это у вас задача криво сформулирована.
Выеживаешся тут..
8 LisaAlisa
 
11.09.18
08:03
(5) Спасибо. Примерно так и сделала. Просто хотелось какое-то более краткое решение, так как сама таблица (мпз, цена, ПозицияДокумента) это результат нескольких запросов
Программист всегда исправляет последнюю ошибку.