SQL 实战:筛选员工当前有效薪水记录
在人力资源管理系统中,我们经常需要查询员工当前的薪资状态。由于薪资表通常采用历史快照设计(即每条记录包含开始日期和结束日期),要获取'当前'数据,关键在于识别出尚未过期的那条记录。
核心思路
大多数系统会用一个特定的未来日期(如 9999-01-01)作为'当前有效'的标记。这意味着只要结束日期是这个值,就说明该薪资记录在当前时间点是有效的。
代码实现
下面是一个标准的查询示例,用于提取所有员工的当前薪水,并按从高到低排序:
SELECT DISTINCT salary
FROM salaries
WHERE to_date = '9999-01-01'
ORDER BY salary DESC;
关键点解析
- 日期过滤:
WHERE to_date = '9999-01-01'是锁定当前状态的核心。在实际业务中,这个日期可能因数据库设计而异,但逻辑是一致的——找到那个代表'未结束'的时间点。 - 去重处理:使用
DISTINCT确保返回的薪水列表不重复。如果多个员工拥有相同的薪资数值,这能避免结果中出现冗余行。 - 排序展示:
ORDER BY salary DESC让高薪在前,便于快速查看薪酬分布情况。
注意事项
虽然 DISTINCT 常用于多列场景,但在本例中它作用于单列 salary。如果你的需求是获取每个员工的具体薪资详情(而非仅薪资数值),则不应加 DISTINCT,而是直接关联员工表进行查询。此外,务必确认数据库中 to_date 字段的实际命名规范,不同系统可能存在差异。

