Как ранжировать продавца, меняющегося во времени по контракту - PullRequest
0 голосов
/ 04 апреля 2019

Я новичок в SQL, и я надеюсь, что мой пост будет ясным.

Итак, у меня есть 1 таблица (см. Рисунки) с моим SalesMen, связанным с контрактом. И я хочу иметь возможность оценить каждого SalesMen по контракту. Поэтому, если сегодня по контракту 001 у меня есть Мартин как единственный продавец, он должен иметь ранг «1». Но если однажды Мартина уволят, а новым парнем станет Фрэнк. Тогда Мартин будет 2-го ранга, а Фрэнк - 1.

пример:

idContract    idSalesMan    DateLoad
001           Jean          1900-01-01
001           Jean          1900-02-02
001           Jean          1900-03-03
002            Martin       1900-01-01
002            Martin       1900-02-02
002            Frank        1900-03-03

Результат, который я хочу:

idContract    idSalesMan    DateLoad       RankedSalesMan
001           Jean          1900-01-01     1
001           Jean          1900-02-02     1
001           Jean          1900-03-03     1
002            Martin       1900-01-01     2
002            Martin       1900-02-02     2
002            Frank        1900-03-03     1

Что я сделал: 1-я попытка: select idContract,IdSalesMan, Row_number() over (partition by IDContract , IDsALESmAN order by IDsALESmAN ) Но это дало мне обычный 1,2,3,4

Тогда я попробовал

select
x.*
,case when x.PrecedingSalesMan = x.SalesMan then
Row_number() over (partition by IDContract , IDsALESmAN order by IDsALESmAN ) 
from(

select idContract,IdSalesMan,

,LAG(CodeAgent,1) over (order by NoContract, idCustomers, kCode_Agent) as PrecedingSalesMan) x

Но это тоже не работает: (

Я не знаю, что делать

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Кажется, вам просто нужен density_rank ()

select *,dense_rank()over(partition by idContract order by idSalesMan) as rn
from table_name
1 голос
/ 04 апреля 2019

Вам нужно DENSE_RANK():

SELECT t.*,
       DENSE_RANK() OVER (PARTITION BY t.idContract ORDER BY t.idSalesMan) AS RankedSalesMan
FROM table t;

Вам нужно только idContract в разделе раздела.

...