如何编写自动获取当前年度及回溯3年会议记录的SQL查询
优化后的SQL查询方案
你的原查询存在几个可优化的点:
- 硬编码年份
'2023',无法自动适配当前年份 decode(count(*),NULL,'N',0,'N','Y')里count(*)永远不会返回NULL,这个分支完全多余- 用字符串
'2023'做数值运算依赖隐式转换,不够严谨
针对需求,给出适配Oracle数据库的优化写法:
SELECT '4. Annual Meeting Management' Item, DECODE(COUNT(*), 0, 'N', 'Y') Result FROM member_annual_meeting WHERE meetingyear >= EXTRACT(YEAR FROM SYSDATE) - 3;
或者用更直观的CASE语句写法:
SELECT '4. Annual Meeting Management' AS Item, CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END AS Result FROM member_annual_meeting WHERE meetingyear >= EXTRACT(YEAR FROM SYSDATE) - 3;
关键说明:
EXTRACT(YEAR FROM SYSDATE)会自动获取当前系统时间的年份,无需手动输入,自动计算当前年份-3的筛选条件- 简化结果判断逻辑:
COUNT(*)返回0代表无符合条件的记录,返回大于0的数则代表有,直接对应N和Y - 直接用数值类型做比较,避免不必要的隐式转换,逻辑更严谨
内容的提问来源于stack exchange,提问作者debrac
相关产品推荐
相关产品推荐

