如何获取提前5天及以上到岗人员姓名?WITH子句使用遇问题
解决方法
核心逻辑是统计每位员工实际到岗日期早于计划到岗日期的天数总和,再筛选出总和≥5的人员,无需关联上下班签到数据。
假设HR_Timing表包含以下关键字段:
name:人员姓名planned_start_date:计划到岗日期actual_start_date:实际到岗日期
以下是修正后的SQL脚本:
WITH early_arrival_days AS ( SELECT name, COUNT(*) AS total_early_days FROM HR_Timing -- 筛选实际到岗早于计划的记录 WHERE actual_start_date < planned_start_date GROUP BY name ) SELECT name FROM early_arrival_days WHERE total_early_days >= 5;
脚本说明
WITH子句部分:先过滤出所有提前到岗的记录,按人员分组统计符合条件的天数总和。- 主查询:从统计结果中筛选出提前到岗天数≥5的人员姓名。
如果你的表中直接存储了提前到岗天数字段(比如early_days,正值表示提前),可简化脚本:
WITH early_arrival_summary AS ( SELECT name, SUM(early_days) AS total_early_days FROM HR_Timing WHERE early_days > 0 GROUP BY name ) SELECT name FROM early_arrival_summary WHERE total_early_days >= 5;
注意事项
- 确保日期字段为数据库可识别的日期类型(如
DATE/DATETIME),避免字符串比较错误。 - 若员工有多条到岗记录(如岗位异动),上述脚本会累计所有提前天数;若只需统计首次到岗,需添加对应过滤条件(如
WHERE is_first_arrival = 1,根据表结构调整)。
内容的提问来源于stack exchange,提问作者Soto A.
相关产品推荐
相关产品推荐

