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

SQL查询问题咨询:如何正确找出公司最资深的部门?

原SQL的问题及修正建议

原SQL存在的问题

  • 入职年限计算不准确:YEAR(NOW()) - YEAR(hire_date)只算年份差,完全忽略月份和日期。比如员工2023年12月31日入职,当前是2024年1月1日,年份差为1,但实际仅入职1天;反之员工2024年1月1日入职,当前是2024年12月31日,年份差为0,但实际已入职近一年。这种计算方式会导致入职年限判断出现偏差。
  • 逻辑偏离需求核心:需求是“部门内员工入职越早,部门资历越老”,本质是比各部门的最早入职日期,而非部门内最大的入职年限。虽然最早入职员工的年限理论上最大,但直接用最早入职日期判断更准确直观,还能避免年限计算误差。

修正后的SQL写法

如果要按资深程度排序所有部门:

SELECT 
    department,
    MIN(hire_date) AS earliest_hire_date,
    TIMESTAMPDIFF(YEAR, MIN(hire_date), NOW()) AS seniority_years
FROM 
    human_resources
GROUP BY 
    department
ORDER BY 
    earliest_hire_date ASC; -- 最早入职的部门排最前,即最资深

如果只需要找出最资深的单个部门:

SELECT 
    department,
    MIN(hire_date) AS earliest_hire_date,
    TIMESTAMPDIFF(YEAR, MIN(hire_date), NOW()) AS seniority_years
FROM 
    human_resources
GROUP BY 
    department
ORDER BY 
    earliest_hire_date ASC
LIMIT 1;

说明

  • MIN(hire_date)直接获取部门内最早入职日期,这是判断部门资深程度的核心依据。
  • TIMESTAMPDIFF(YEAR, MIN(hire_date), NOW())能准确计算从最早入职到现在的年份差,避免了单纯年份相减的误差(该函数适用于MySQL,其他数据库有类似替代函数,比如PostgreSQL的AGE())。

内容的提问来源于stack exchange,提问作者Hamza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:05:32