Sql 每月提取所有奖金最高的员工。最大(总和)分组依据
如何提取每月最高奖金的所有员工 我有一张桌子:Sql 每月提取所有奖金最高的员工。最大(总和)分组依据,sql,sql-server,Sql,Sql Server,如何提取每月最高奖金的所有员工 我有一张桌子: 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 300
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
这不是正确的结果
因此,我需要只显示每个月的最高奖金。我认为您需要使用窗口功能进行聚合。大概是这样的:
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;
大多数DBMS支持
RANK
/ROW\u NUMBER
用您正在使用的数据库标记您的问题。@ББСаааааааааааааа。这是一个简单的方式来表达你对他的时间和才华的赞赏。