You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者саша

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:47:49