Имя: Пароль:
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) Спасибо. Примерно так и сделала. Просто хотелось какое-то более краткое решение, так как сама таблица (мпз, цена, ПозицияДокумента) это результат нескольких запросов
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn