2015-11-30 3 views
0

У меня есть 3 очевидных стола, продавцов, заказов и клиентов. В таблице заказов у ​​меня есть список всех заказов и SalesPersonID.Найти вторую по величине продажу продавца SQL

Я хочу найти каждого продавца с более чем 2 заказами и найти стоимость заказа для второго по величине заказа. Я могу выполнить этот запрос, если меня попросят найти значение порядка MAX, но я не могу найти простой способ сделать это для второго наивысшего значения.

Newbie здесь, поэтому, пожалуйста, пройдите легко. Заранее спасибо.

Я пробовал свои мозги, читая о ROW_Number и Rank за последние 3 часа, но не могу понять это. И я уверен, есть более простой способ, чем писать мои собственные пользовательские функции

Select distinct 
    Orders.SalesID, MAX(Orders.OrderAmount), SalesPerson.SalesName 
From 
    Orders, SalesPerson 
Where 
    Orders.SalesID = SalesPerson.SalesID 
Group by 
    Orders.SalesID, SalesPerson.SalesName 
Order by 
    MAX(Orders.OrderAmount) DESC 
+0

[Вредные привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад), и его использование не рекомендуется –

ответ

2

Вы можете использовать rank функции. Для каждого торгового лица ранжирование присваивается на основе суммы заказа. Наибольшая сумма присваивается 1. И так далее в порядке убывания.

select salesname, orderamount 
from (
select 
rank() over(partition by s.SalesName order by o.OrderAmount desc) as rnk 
,s.SalesName 
,o.OrderAmount 
From Orders o 
join SalesPerson s on o.SalesID = s.SalesID) t 
where rnk = 2 
+0

Большое спасибо! Так что это была ранг-функция! Я просто не присоединился к нему, прежде чем я вернулся к первому «выбрать». Doh – AbeeCrombie

Смежные вопросы