首页 > 解决方案 > SQL 按功能分组以仅对最新数据进行分类

问题描述

所以我有一个名为 title 的表,它存储每个员工持有的所有头衔,看起来像这样

emp_no 标题 开始日期
101 工程师 2019-01-01
101 高级工程师 2020-02-01
102 工程师 2019-01-11
102 高级工程师 2020-02-11
103 工程师 2019-01-21
104 工程师 2019-01-31
105 联系 2019-01-01
106 联系 2019-01-11
106 经理 2020-02-11
107 联系 2019-01-21
107 经理 2020-02-21
108 联系 2019-01-31

请注意,每个员工可以拥有多个头衔。例如,emp 101 职称是 2019 年 1 月 1 日的工程师,但一年后晋升为高级工程师。

现在假设我想计算每个职位有多少员工。我曾尝试使用 count 函数和 group by (按标题对员工人数进行分组),但问题是,SQL 查询还计算每个员工的过去职位。

确切地说,我只想包括员工当前拥有的最新角色。所以在这种情况下,我期望的结果是工程师:2 名员工(因为另外 2 名已被提升为高级工程师),高级工程师:2 名员工,助理:2 名员工(因为另外 2 名已被提升为经理),经理:2名员工

有什么方法可以实现吗?注意:此表格格式来自我正在学习的 SQL 在线课程之一,因此我不是制作表格的人。并且还在原始表中包含了数万条数据。

标签: mysqlsql

解决方案


您可以在计数时简单地过滤 where 条件下的数据。查询如下:

select title, count(distinct emp_no) as Count
from (select emp_np, title, max(start_date) as start_date
      from table 
      group by emp_np, title) subset
group by title

推荐阅读