用sql分月统计开始时间和结束时间的内的在职员工职级,数据表没有是否在职字段,需要用入职时间和结束时间来统计筛选
时间: 2024-10-16 09:13:28 浏览: 14
要在SQL中统计没有`在职状态`字段的数据表中,每月在职员工及其职级,你可以通过以下几个步骤处理:
1. 首先,假设你有一个名为`employees`的表,其中包含`employee_id`, `hire_date`, 和 `job_title`等字段。你需要筛选出有开始工作记录(hire_date)并且有结束工作时间(尽管没有直接表示是否在职,但我们可以通过`end_date`为NULL来代表当前仍在职的情况)。
2. 使用`BETWEEN`操作符来找出那些在给定月份内有活动(即既没有离职也没有新入职)的员工。例如,如果你想要统计2023年1月的数据,你可以这样做:
```sql
SELECT
YEAR(hire_date) AS hire_year,
MONTH(hire_date) AS hire_month,
job_title
FROM
employees
WHERE
hire_date BETWEEN '2023-01-01' AND '2023-01-31'
AND (end_date IS NULL OR end_date > '2023-01-31')
GROUP BY
hire_year, hire_month, job_title;
```
这个查询将返回2023年1月所有在职员工以及他们的职级。
3. 如果你想得到每个月的在职员工总数,可以在`COUNT(DISTINCT employee_id)`上加上条件:
```sql
SELECT
YEAR(hire_date) AS hire_year,
MONTH(hire_date) AS hire_month,
COUNT(DISTINCT employee_id) AS active_employees
FROM
(
SELECT
employee_id,
hire_date,
job_title
FROM
employees
WHERE
hire_date BETWEEN '2023-01-01' AND '2023-01-31'
AND (end_date IS NULL OR end_date > '2023-01-31')
) AS monthly_active
GROUP BY
hire_year, hire_month;
```
这会给你每个月在职员工的数量。
阅读全文