|
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) Спасибо. Примерно так и сделала. Просто хотелось какое-то более краткое решение, так как сама таблица (мпз, цена, ПозицияДокумента) это результат нескольких запросов
|
|