繁体   English   中英

从oracle中的表中提取Max单个高位字符

[英]Extract Max single upper character from table in oracle

我有测试输入表

-----------------------
RN | IDs
1  | Az
2  | Azz
3  | B
4  | C
5  | a
6  | e
--------------------

我需要输出

----------
RN | IDs
4  |  C

我需要获取在大写情况下的ID和single(length 1),并且ID应该按顺序最大。 像本例一样, C输出 因为Size为1,所以大小写顺序为UPPER和MAX。 你能在这里帮我吗?

第一步是确定您要考虑的ids值。 一种检查长度和字符范围的方法:

where length(ids) = 1
and ids between 'A' and 'Z'

这将对您的字符集做出一些假设,或者使用正则表达式也将做出一些假设:

where regexp_like(ids, '^[A-Z]$')

或最好不使用类,而不是使用固定范围:

where regexp_like(ids, '^[[:upper:]]$')

有了您的数据,其中任何一个都会给您两行,分别是B和C。

然后,您需要找到具有最大ids值的行。 您可以进行自我连接,这有点浪费; 或使用子查询来计算排名列,然后对其进行过滤:

select rn, ids
from (
  select rn, ids, rank() over (order by ids desc) as rnk
  from your_table
  where regexp_like(ids, '^[[:upper:]]$')
)
where rnk = 1;

        RN IDS
---------- ---
         4 C  

或者您可以将max()函数的变体与last一起使用来一步完成:

select max(rn) keep (dense_rank last order by IDs) as rn, max(ids)
from your_table
where regexp_like(ids, '^[[:upper:]]$');

        RN MAX
---------- ---
         4 C  

你还没有说,如果出现平局,例如两个应该发生什么rn与价值观C 这些方法中的第一种将向您显示两种方法-但如果可以指定要查看的方法,则可以将其修改为仅显示一种方法。 第二个只会显示一个,而目前尚不确定,因为该order by没有有关如何打平领带的信息。

使用ASCII函数

select max(RN) as MAX_ID from yourTableName t1
where length(t1.IDs)=1 and  ascii(IDs)  between ascii('A') and  ascii('Z');

尝试这个:

SELECT MAX(RN) FROM test
WHERE LENGTH(ID)=1 AND (UNICODE(ID) != UNICODE(LOWER(ID))
GROUP BY ID;

您可以通过这种方式来享受它:)

select h.ID, h.DESC
  from test_table h
 where length(h.DESC) = 1
   and upper(h.DESC) = h.DESC
   and h.ID = (select MAX(y.ID)
                 from test_table y
                where length(y.DESC) = 1
                  and upper(y.DESC) = y.DESC)

首先过滤掉length(IDs)=1足够了,并按decode(upper(IDs),IDs,0,1), IDs desc

select RN , IDs 
  from
    (   
     select t.*,
            row_number() over (order by decode(upper(IDs),IDs,0,1), IDs desc )
            as rn2
       from t
      where length(IDs)=1   
    ) 
 where rn2 = 1;

 RN      IDS
 -----   -----
  4        C

Rextester演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM