2013-10-10 84 views
-1

我有一个表格说变量,其中一列存在名称“名称”。现场有值喜欢 -Oracle查询选择

abc_R01 
    abc_R02 
    abc_R03 
    pqrs_R01 
    pqrs_R02 
    xyz_R01 
    xyz_R02 
    xyz_R03 
    xyz_R04 

现在我的选择标准是一样,我有选择的每一个最新的变量名,即我可以发射单/复杂的查询,以获得结果喜欢 -

abc_R03 
    pqrs_R02 
    xyz_R04 

或者我需要通过我的代码来处理它,这里_Rxx表示修改我的变量。 请帮帮我。

回答

1

请尝试:

select 
    Col 
from 
(
    select 
    Col, 
    row_number() over (partition BY substr(Col, 0, instr(Col, '_')) order by regexp_substr(col, '\d+$') DESC) rn 
    from YourTable 
)x where rn=1; 

检查下面的查询在10个G

select 
    Col 
from 
(
    select 
    Col, 
    row_number() over (partition BY substr(Col, 0, instr(Col, '_')) order by substr(col, instr(col, 'R')+1) DESC) rn 
    from YourTable 
)x where rn=1; 

SQL Fiddle Demo

+0

感谢您的宝贵意见,但是此查询给出的错误是Oracle-10i ORA-00904:“REGEXP_SUBSTR”:无效标识符 00904. 00000 - “%s:无效标识符” –

+0

对不起,Oracle-10g –

1
select name 
from 
(
select 
    substr("name",0,length("name")-1) as n1,max("name") as name 
from Table1 
    group by substr("name",0,length("name")-1) 
)t 

SQL Fiddle

+1

我认为结果是添加名称“xyz_R20”。 – TechDo

1

这也将帮助你,

WITH t(NAME) AS 
(
SELECT 'abc_R01' FROM dual 
UNION 
SELECT 'abc_R02' FROM dual 
UNION 
SELECT 'abc_R03' FROM dual 
UNION 
SELECT 'pqrs_R01' FROM dual 
UNION 
SELECT 'pqrs_R02' FROM dual 
UNION 
SELECT 'xyz_R01' FROM dual 
UNION 
SELECT 'xyz_R02' FROM dual 
UNION 
SELECT 'xyz_R03' FROM dual 
UNION 
SELECT 'xyz_R04' FROM dual 
) 
SELECT NAME 
FROM (
    SELECT substr(NAME, 0, instr(NAME, 'R')), 
      MAX(NAME) NAME 
    FROM t 
    GROUP BY substr(NAME, 0, instr(NAME, 'R')) 
    );