Sql 从三个不同的查询中获取最大数量

Sql 从三个不同的查询中获取最大数量,sql,oracle,Sql,Oracle,我有3个查询,根据条件检索最大值 select max(to_number(substr(attr_value,9)))+1 from circ_inst inner join circ_attr_settings on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and val_attr_inst_id=1045 where circ_attr_settings.attr_value like '

我有3个查询,根据条件检索最大值

select max(to_number(substr(attr_value,9)))+1 
  from circ_inst inner
  join circ_attr_settings 
    on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id 
   and val_attr_inst_id=1045 
 where circ_attr_settings.attr_value like 'IPANEMA-%' 



select max(to_number(substr(attr_value,10)))+1 
  from circ_inst inner
  join circ_attr_settings 
    on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id 
   and val_attr_inst_id=1045 
 where circ_attr_settings.attr_value like 'FIREWALL-%'



select max(to_number(substr(attr_value,16)))+1 
  from circ_inst 
 inner join circ_attr_settings
    on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id
   and val_attr_inst_id=1045 
 where circ_attr_settings.attr_value like 'LAYER2 SWITCH-%'
我想得到这3个查询中的最大数量(如果3个查询的结果分别是6430、6434和6418,那么我想得到值“6434”,这是三个结果中的最大值


我尝试使用
max(query1、query2、query3)
,但没有成功。

我认为您可以通过一个查询来实现这一点:

select max(to_number(substr(attr_value,instr(attr_value, '-')+1)))+1
from circ_inst inner join
     circ_attr_settings
     on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and
        val_attr_inst_id=1045
where circ_attr_settings.attr_value like 'LAYER 2 SWITCH-%') or
      circ_attr_settings.attr_value like 'IPANEMA-%' or
      circ_attr_settings.attr_value like 'FIREWALL-%'

您的联接看起来都相同。唯一的区别是提取数字。您可以通过在值中查找“-”来获得正确的起始位置。

您可以这样做:

select greatest (
(select max(to_number(substr(attr_value,9)))+1 from circ_inst inner join circ_attr_settings on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and val_attr_inst_id=1045 where circ_attr_settings.attr_value like 'IPANEMA-%'),
(select max(to_number(substr(attr_value,10)))+1 from circ_inst inner join circ_attr_settings on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and val_attr_inst_id=1045 where circ_attr_settings.attr_value like 'FIREWALL-%'),
(select max(to_number(substr(attr_value,16)))+1 from circ_inst inner join circ_attr_settings on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and val_attr_inst_id=1045 where circ_attr_settings.attr_value like 'LAYER 2 SWITCH-%')
) from dual;

谢谢你的回答……也许我更喜欢这个,因为它不需要三个查询。这是一个更好的解决方案,特别是如果选择的值将来可能需要更改。好吧,写完后,这个解决方案只需要一个“-”这似乎是该字段的标准。确切地说,文本中只有一个“-”,这些值在不久的将来基本不会改变,谢谢大家