Подготовка данных образца:
declare @Year table
(
Year int
)
insert @Year values (1990), (1991), (1992)
declare @Team table
(
Team int,
Player varchar(10)
)
insert @Team values
(1, 'a'),
(1, 'b'),
(1, 'c'),
(1, 'd'),
(1, 'e'),
(1, 'f'),
(1, 'g'),
(2, 'p'),
(2, 'q'),
(2, 'r'),
(2, 's'),
(2, 't'),
(2, 'u'),
(2, 'v')
declare @Player table
(
Id int identity,
Year int,
Team int,
Name varchar(10),
Score int
)
insert
@Player
select
y.Year,
t.Team,
t.Player,
60 + cast(40 * rand(checksum(newid())) as int) as Score
from
@Year as y
cross join
@Team as t
order by 1, 2, 3
Образец данных:
| Id | Year | Team | Name | Score |
|----|------|------|------|-------|
| 1 | 1990 | 1 | a | 99 |
| 2 | 1990 | 1 | b | 78 |
| 3 | 1990 | 1 | c | 80 |
| 4 | 1990 | 1 | d | 94 |
| 5 | 1990 | 1 | e | 77 |
| 6 | 1990 | 1 | f | 96 |
| 7 | 1990 | 1 | g | 85 |
| 8 | 1990 | 2 | p | 97 |
| 9 | 1990 | 2 | q | 67 |
| 10 | 1990 | 2 | r | 68 |
| 11 | 1990 | 2 | s | 61 |
| 12 | 1990 | 2 | t | 78 |
| 13 | 1990 | 2 | u | 88 |
| 14 | 1990 | 2 | v | 66 |
| 15 | 1991 | 1 | a | 93 |
| 16 | 1991 | 1 | b | 82 |
| 17 | 1991 | 1 | c | 96 |
| 18 | 1991 | 1 | d | 90 |
| 19 | 1991 | 1 | e | 67 |
| 20 | 1991 | 1 | f | 60 |
| 21 | 1991 | 1 | g | 64 |
| 22 | 1991 | 2 | p | 83 |
| 23 | 1991 | 2 | q | 77 |
| 24 | 1991 | 2 | r | 75 |
| 25 | 1991 | 2 | s | 74 |
| 26 | 1991 | 2 | t | 91 |
| 27 | 1991 | 2 | u | 88 |
| 28 | 1991 | 2 | v | 69 |
| 29 | 1992 | 1 | a | 96 |
| 30 | 1992 | 1 | b | 98 |
| 31 | 1992 | 1 | c | 70 |
| 32 | 1992 | 1 | d | 68 |
| 33 | 1992 | 1 | e | 84 |
| 34 | 1992 | 1 | f | 70 |
| 35 | 1992 | 1 | g | 87 |
| 36 | 1992 | 2 | p | 60 |
| 37 | 1992 | 2 | q | 77 |
| 38 | 1992 | 2 | r | 76 |
| 39 | 1992 | 2 | s | 91 |
| 40 | 1992 | 2 | t | 80 |
| 41 | 1992 | 2 | u | 70 |
| 42 | 1992 | 2 | v | 62 |
Результат:
| Year | Team | Name | Score |
|------|------|------|-------|
| 1990 | 1 | d | 98 |
| 1990 | 1 | b | 94 |
| 1990 | 1 | c | 93 |
| 1990 | 1 | g | 79 |
| 1990 | 1 | f | 78 |
| 1990 | 2 | q | 99 |
| 1990 | 2 | r | 85 |
| 1990 | 2 | t | 82 |
| 1990 | 2 | v | 80 |
| 1990 | 2 | s | 69 |
| 1991 | 1 | c | 95 |
| 1991 | 1 | f | 93 |
| 1991 | 1 | a | 88 |
| 1991 | 1 | g | 81 |
| 1991 | 1 | b | 73 |
| 1991 | 2 | r | 99 |
| 1991 | 2 | u | 93 |
| 1991 | 2 | t | 89 |
| 1991 | 2 | p | 86 |
| 1991 | 2 | v | 80 |
| 1992 | 1 | e | 90 |
| 1992 | 1 | g | 88 |
| 1992 | 1 | f | 84 |
| 1992 | 1 | a | 80 |
| 1992 | 1 | b | 77 |
| 1992 | 2 | p | 94 |
| 1992 | 2 | t | 89 |
| 1992 | 2 | v | 86 |
| 1992 | 2 | u | 77 |
| 1992 | 2 | q | 74 |
Запрос:
;
with
sort as
(
select
row_number() over (partition by p.Year, p.Team order by p.Score desc) as RowId,
p.Year,
p.Team,
p.Name,
p.Score
from
@Player as p
)
select
s.Year,
s.Team,
s.Name,
s.Score
from
sort as s
where
s.RowId <= 5
В своем вопросе отсутствует информация о том, как вы получаете лучших исполнителей даже в течение одного года/команды, поэтому трудно дать конкретный рабочий ответ, а не просто советы о том, что попробовать. Не могли бы вы добавить фактический запрос, который вы используете сейчас, и некоторые примеры данных, которые будут работать с ним? –
Это проект, над которым я работаю дома, и я представил это с работы, поэтому у меня нет данных со мной. Спасибо, что нашли время ответить. – Yabbie
Что определяет топ 5 исполнителей? – Paparazzi