Oracle数据库如何合并SELECT查询,对最大SERIAL_NBR截取前几位字符
问题原因
你之前的错误写法存在两个核心问题:
- 外层直接使用
FROM ttr_voucher会返回全表所有行数据,和你需要唯一最大值的需求不符 - 子查询的别名
RESULT定义在子查询内部,外层查询无法识别,同时你额外声明了SUBSTR(SERIAL_NBR,1,3)独立列,所以会返回两列结果
正确解法
直接对聚合后的最大值做截取即可,不需要嵌套多层子查询,代码如下:
SELECT SUBSTR(MAX(SERIAL_NBR), 1, 3) AS RESULT FROM ttr_voucher WHERE voucher_typcode = 'VOUCHER' AND SERIAL_NBR LIKE '24%';
逻辑说明
Oracle支持将聚合函数的返回值直接作为其他内置函数的入参,上述语句的执行顺序为:
- 先按WHERE条件过滤出符合要求的行
- 计算过滤后数据集的
SERIAL_NBR最大值 - 对该最大值做前3位截取
- 最终返回单列单行的截取结果,别名
RESULT可以正常生效
内容的提问来源于stack exchange,提问作者Alan3212
相关产品推荐
相关产品推荐

