MySQL时间点筛选:提取入职满两年员工的首薪及两年后薪资
没问题,我来帮你解决这个薪资提取的问题!你现在的SQL已经能筛选出任职满两年的员工,但确实没法直接拿到对应的首薪和两年后薪资——核心是要把筛选出的员工和他们的具体薪资记录关联起来,而不是只聚合日期。
需求拆解
我们需要精准获取三个信息:
- 任职满两年的员工ID
- 员工入职时的第一份薪资(对应最早
from_date的salary) - 入职整整两年后,当时有效的薪资
解决方案SQL
WITH employee_dates AS ( SELECT id, MIN(from_date) AS hire_date, -- 员工入职日期 MAX(to_date) AS last_employment_date FROM salaries GROUP BY id -- 筛选任职满两年的员工:入职两年后的日期仍在任职期内 HAVING DATE_ADD(MIN(from_date), INTERVAL 2 YEAR) <= MAX(to_date) ) SELECT ed.id, entry_sal.salary AS entry_salary, -- 入职首薪 two_year_sal.salary AS salary_after_two_years -- 两年后薪资 FROM employee_dates ed -- 关联入职首薪记录:匹配员工ID和入职日期 INNER JOIN salaries entry_sal ON ed.id = entry_sal.id AND entry_sal.from_date = ed.hire_date -- 关联两年后薪资记录:找到覆盖"入职两年后"这个时间点的薪资区间 INNER JOIN salaries two_year_sal ON ed.id = two_year_sal.id AND two_year_sal.from_date <= DATE_ADD(ed.hire_date, INTERVAL 2 YEAR) AND two_year_sal.to_date >= DATE_ADD(ed.hire_date, INTERVAL 2 YEAR);
代码说明
- CTE
employee_dates:先筛选出符合任职时长要求的员工,同时提取他们的入职日期和最后任职日期。这里把你原语句中的INTERVAL 3 YEAR改成了2 YEAR,匹配你“入职满两年”的需求。 - 首薪关联:直接通过员工ID和入职日期匹配薪资表,因为数据按时间顺序排列,最早的
from_date对应的就是入职首薪。 - 两年后薪资关联:通过薪资的有效区间(
from_date到to_date)匹配“入职两年后”的时间点,确保拿到的是当时正在生效的薪资,即使员工中间有调薪也能精准获取。
内容的提问来源于stack exchange,提问作者саша
相关产品推荐
相关产品推荐

