基于Advantage SQL筛选全有结束日期的学员最新结束日期
解决Advantage SQL筛选全学习目标有结束日期的学员及最新日期问题
我来帮你搞定这个需求!要筛选出所有学习目标都有结束日期的学员,同时获取他们的最新结束日期,核心是先排除那些存在至少一个无结束日期学习目标的学员,再对合格学员计算最大结束日期。
这里给你一个可行的Advantage SQL查询语句:
SELECT a AS student_id, MAX(c) AS latest_end_date FROM your_table_name -- 替换成你的实际表名 WHERE a NOT IN ( -- 子查询:找出存在至少一个无结束日期学习目标的学员 SELECT a FROM your_table_name WHERE c IS NULL OR TRIM(c) = '' ) GROUP BY a
关键逻辑解释:
- 子查询部分:定位所有有缺失结束日期记录的学员——只要某个学员的任意一条学习目标记录中
c是NULL或者空字符串(如果你的空值是其他形式,比如默认的无效日期,记得调整这里的判断条件),就会被标记出来。 - 外层查询用
NOT IN排除这些不合格的学员,确保剩下的学员每一条学习目标都有有效的结束日期。 - 最后通过
GROUP BY a分组,用MAX(c)拿到每个学员的最新结束日期。
如果你的Advantage SQL版本支持窗口函数,也可以用另一种更灵活的写法(不过上面的写法兼容性更好):
WITH student_validity AS ( SELECT a, c, -- 标记该学员是否存在无结束日期的记录 MAX(CASE WHEN c IS NULL OR TRIM(c) = '' THEN 1 ELSE 0 END) OVER (PARTITION BY a) AS has_missing_date FROM your_table_name ) SELECT a AS student_id, MAX(c) AS latest_end_date FROM student_validity WHERE has_missing_date = 0 GROUP BY a
两种写法都能精准满足你的需求,选你觉得更易读的就行~
内容的提问来源于stack exchange,提问作者user8591026
相关产品推荐
相关产品推荐

