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

如何限制SQL查询仅读取对应日期范围的学生专业流与薪酬编码匹配数据

问题根因

现有校验逻辑的关联条件仅匹配学生ID和学段,未限制学生就读时段和配置生效时段的对应关系,导致不同时段的配置被交叉匹配,产生大量误报。

修复方案

在左连接的关联条件中新增时间匹配规则,同时修正原有代码的字段名拼写错误,修改后逻辑如下:

  • 学生就读的整个时段必须完全落在配置的生效区间内,避免跨时段匹配
  • 修正having子句中date_check和实际定义的校验字段名EnrollmentDate_Check不一致的问题

修改后SQL代码

proc sql;
    create table detail as
        select distinct 
            a.student_ID,           
            case when b.studentId = '' then '学生信息表未找到对应行' else '' end as Row_Check,
            case when b.studentId ^= '' and a.subject_name ^= b.SubjName then '学科名称不匹配' else '' end as Subject_Check,
            case when b.studentId ^= '' and a.pay_code ^= b.paycode then '薪酬编码不匹配' else '' end as PayCode_Check,
            case when b.studentId ^= '' and a.stream_code ^= b.Streamcode then '专业流编码不匹配' else '' end as Stream_Check,
            case when b.studentId ^= '' and (a.start_date < b.StartDate) or (a.end_date > b.EndDate) then '就读日期不在生效范围内' else '' end as EnrollmentDate_Check,
            a.student_name,
            a.subject_name,
            a.start_date,
            a.end_date,         
            a.participation_code,
            a.pay_code                  
        from student_data a
            left join StudentInfo b
                on b.studentId = a.Student_ID 
                and b.section = a.section
                /* 新增时间范围匹配规则,确保学生数据和对应时段的配置匹配 */
                and a.start_date >= b.StartDate
                and a.end_date <= b.EndDate
        having Row_Check ^= '' 
            or Subject_Check ^= '' 
            or PayCode_Check ^= '' 
            or Stream_Check ^= '' 
            or EnrollmentDate_Check ^= ''
        order by a.student_ID, a.student_name;
quit;

补充说明

如果存在学生就读时段跨2021年12月31日和2022年1月1日的情况,建议先将该类记录拆分为2021年底前、2022年后两条独立记录,再执行上述校验逻辑,避免漏判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:05