基于另一行VARCHAR去重,生成仅含在职员工名册的方法咨询
筛选在职员工单行数据的解决方案
针对你描述的表结构(在职员工仅1行wages状态记录,离职员工有2行记录含term状态),可以用以下几种SQL方法筛选出仅在职的员工数据:
方法一:使用NOT EXISTS子查询
直接筛选状态为在职的记录,同时排除那些存在离职状态记录的员工:SELECT e1.* FROM employee_table e1 WHERE e1.status = 'wages' AND NOT EXISTS ( SELECT 1 FROM employee_table e2 WHERE e2.employee_id = e1.employee_id AND e2.status = 'term' );方法二:分组统计筛选
通过分组统计每个员工的记录行数,只保留行数为1且状态为在职的员工:SELECT * FROM employee_table WHERE employee_id IN ( SELECT employee_id FROM employee_table GROUP BY employee_id HAVING COUNT(*) = 1 AND MAX(status) = 'wages' );方法三:LEFT JOIN关联筛选
通过自连接匹配离职状态记录,筛选出没有对应离职记录的在职行:SELECT e1.* FROM employee_table e1 LEFT JOIN employee_table e2 ON e1.employee_id = e2.employee_id AND e2.status = 'term' WHERE e1.status = 'wages' AND e2.employee_id IS NULL;
内容的提问来源于stack exchange,提问作者Clay
相关产品推荐
相关产品推荐

