获取具有相同id值的最长字符串的字段

sam*_*sam 3 sql oracle

我必须为相同的id字段获取具有最长字符串值的行.

create table test(
id number,
test_data varchar2(20)
);

insert all      
    into test values (1,'aaa')
    into test values (1,'a')
    into test values (1,'abxw')
    into test values (2,'aaa')
    into test values (2,'tris')
select * from dual;
Run Code Online (Sandbox Code Playgroud)

我想要的输出是


1 abxw - 最新字符串

2个tris

我怎样才能得到所需的输出?我不知道.

伙计们如何使用光标.我们可以将光标用于此目的吗?有谁有想法吗?可能吗??

谢谢.

aqu*_*nas 8

我喜欢使用分区来进行这类查询:

select id,test_data from (
  select
  id, test_data, 
     row_number() over( partition by id order by length(test_data) desc) as rnum
from
  test 
) where rnum=1
Run Code Online (Sandbox Code Playgroud)

http://www.sqlfiddle.com/#!4/66d4c/20

当然,关于这一点的好处是,如果您决定要另一个抢七(例如,按字母顺序),您只需要将其添加到您的order by子句中.顺便说一句,这不是一个坏主意,那样你的结果集就不会是非确定性的.