mysql - 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 在线课程之一,因此我不是制作表格的人。并且还在原始表中包含了数万条数据。
解决方案
您可以在计数时简单地过滤 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
推荐阅读
- django - Django 用户配置文件没有配置文件与给定查询匹配
- javascript - Django:用整数变量替换一段url
- php - PHP 回显这个 if 条件
- android - 如何从 MaterialComponents.DayNight 主题更改工具栏文本颜色?
- javascript - 通过三层组件传递函数(即从孙组件调用函数)
- java - 我们如何在 Maven 中为主要和测试 java 代码集设置不同的 PMD 规则集?
- node.js - 使用 readFileStream 读取变化的文件
- reactjs - 从 react-loadable 使用 Loadable 进行代码拆分会导致屏幕闪烁
- firebase - 未处理的“错误”事件。(/var/task/google/api)
- laravel - Laravel 5.7 API 与 CORS 问题