Выводите всех сотрудников с максимальным бонусом каждый месяц. МАКС. (СУММА) ГРУППА ПО - PullRequest
0 голосов

Как вывести всех сотрудников с максимальным бонусом за каждый месяц?

У меня есть таблица:

id_prem id_emp  months                  premium
1       1       2016-01-01 00:00:00.000 3000
3       1       2016-01-01 00:00:00.000 2000
5       1       2016-03-01 00:00:00.000 3000
6       1       2016-01-16 00:00:00.000 3000
8       1       2016-01-11 00:00:00.000 2000
7       2       2016-02-14 00:00:00.000 5000
2       2       2016-02-01 00:00:00.000 5000
4       3       2016-02-01 00:00:00.000 1000
9       3       2016-02-09 00:00:00.000 1000

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

Мой запрос:

SELECT id_emp, mon, MAX(sum_prem) as max_premium
FROM(SELECT id_emp, month(months) as mon, SUM(premium) as sum_prem FROM Employee.Emp_prem 
GROUP BY id_emp, month(months))as t 
GROUP BY id_emp, mon

Результат:

id_emp mon  max_premium
1      1    10000
2      2    10000
3      2    2000
1      3    3000

Это не тот результат.

Мне нужно в результате отображать только максимальный бонус за каждый месяц.

1 Ответ

1 голос
/ 11 июля 2020

Я думаю, вам нужна агрегация с оконными функциями. Примерно так:

select e.*
from (select id_emp, year(months) as yyyy, month(months) as mm, sum(premium) as premium,
             row_number() over (partition by year(months), month(months) order by sum(premium) desc) as seqnum
      from Employee.Emp_prem 
      group by id_emp, year(months), month(months)
     ) e
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...