请求协助修改按3年分组MODEL_YEAR_FW(2003-2022)的SQL查询
解决方案
先修正原查询里的语法错误,再实现每3年一组的统计逻辑:
原查询存在的问题
- 过滤条件
VEHICLES_FW.ARCHIVE_STATUS_FW - 'N'是语法错误,应该用等于运算符= - 年份筛选
MODEL_YEAR_FW >2003不符合需求,需要限定在2003至2022的范围内
修改后的SQL(适配Oracle环境)
SELECT COUNT(VEHICLES_FW.MODEL_YEAR_FW) AS COUNT_VEHICLES, -- 生成每组的起始年份,比如2003-2005组对应2003,2006-2008组对应2006 FLOOR((MODEL_YEAR_FW - 2003)/3)*3 + 2003 AS GROUP_START_YEAR, -- 可选:直观显示分组范围,最后一组自动适配2022结束年 TO_CHAR(FLOOR((MODEL_YEAR_FW - 2003)/3)*3 + 2003) || '-' || TO_CHAR(LEAST(FLOOR((MODEL_YEAR_FW - 2003)/3)*3 + 2005, 2022)) AS YEAR_RANGE FROM FWUSER.VEHICLES_FW WHERE VEHICLES_FW.ARCHIVE_STATUS_FW = 'N' AND MODEL_YEAR_FW BETWEEN 2003 AND 2022 GROUP BY FLOOR((MODEL_YEAR_FW - 2003)/3)*3 + 2003 ORDER BY GROUP_START_YEAR
逻辑说明
- 分组计算:通过
(MODEL_YEAR_FW - 2003)/3计算年份相对于起始年2003的偏移组,取整后还原为每组的起始年份,确保每3年为一个分组 - 范围处理:最后一组2021-2022因为到2022结束,用
LEAST函数把结束年份限制在2022,避免显示超出范围的2023 - 修正了原查询的语法错误,确保过滤条件和统计范围完全匹配需求
内容的提问来源于stack exchange,提问作者ItsRedwan
相关产品推荐
相关产品推荐

