Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбор максимальной стоимости  [new]
wizzzi
Member

Откуда:
Сообщений: 36
Привет всем, имеется следующее задание: вернуть самый крупный заказ для каждого из продавцов за определенный год т.е. из всех выполненных заказов мы должны извлечь максимальный.
Я сделал следующее(для каждого продавца и для каждого выполненного им заказа подсчитал его стоимость):
SELECT LastName + ' ' + FirstName AS Person, ord.OrderID, (CONVERT(money, ROUND(SUM((UnitPrice * (1 - Discount))* Quantity), 2), 1)) AS Totals 
FROM dbo.[Order Details] as ord, dbo.Employees, dbo.Orders WHERE Employees.EmployeeID = Orders.EmployeeID AND Orders.OrderID = ord.OrderID AND YEAR(Orders.OrderDate) = '1998'
GROUP BY LastName + ' ' + FirstName, ord.OrderID
ORDER BY LastName + ' ' + FirstName, ord.OrderID

Теперь нужно из записей с одинаковым LastName + ' ' + FirstName, оставить только ту, у которой максимальная стоимость, подскажите, как это сделать.
2 фев 14, 17:37    [15506798]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимальной стоимости  [new]
sdet
Member

Откуда:
Сообщений: 463
wizzzi,
select top 1 with ties ... order by Totals desc
2 фев 14, 18:06    [15506862]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимальной стоимости  [new]
sdet
Member

Откуда:
Сообщений: 463
wizzzi,

Подумайте также над тем, что здесь YEAR(Orders.OrderDate) = '1998' будет index scan
2 фев 14, 18:12    [15506870]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимальной стоимости  [new]
blzz
Member [заблокирован]

Откуда: Днепропетровск
Сообщений: 270
....
HAVING CONVERT(money, ROUND(SUM((UnitPrice * (1 - Discount))* Quantity), 2), 1) = MAX((CONVERT(money, ROUND(SUM((UnitPrice * (1 - Discount))* Quantity), 2), 1)))
2 фев 14, 18:40    [15506924]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимальной стоимости  [new]
wizzzi
Member

Откуда:
Сообщений: 36
sdet,
вариант бы подошел, если у меня был бы только один продавец(у меня их человек 20).

blzz,
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
2 фев 14, 18:58    [15506962]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимальной стоимости  [new]
sdet
Member

Откуда:
Сообщений: 463
wizzzi
sdet,
вариант бы подошел, если у меня был бы только один продавец(у меня их человек 20).

А with ties по вашему что делает?
2 фев 14, 19:01    [15506978]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимальной стоимости  [new]
sdet
Member

Откуда:
Сообщений: 463
sdet,

order by row_number(partition by person order by Totals desc)
2 фев 14, 19:05    [15506993]     Ответить | Цитировать Сообщить модератору
 Re: Выбор максимальной стоимости  [new]
Добрый Э - Эх
Guest
wizzzi,

выбирай любой из способов по вкусу...
2 фев 14, 21:04    [15507360]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить