求助: 帮忙写一个 sql query

[复制链接]
查看11 | 回复8 | 2010-3-1 11:04:59 | 显示全部楼层 |阅读模式
源表:
idname addv_num
1 AAA abc
1
1 AAA bcd
2
1 AAA cde
3
2 BBB cdf
1
2 BBB dfg
2
3 CCCggg
1
4 DDDefg
要求:找出 v_num 最大 或者 是 null 的记录:
结果应该是:
1 AAAcde 3
2 BBBdfg 2
3 CCC ggg1
4 DDD efg
scripts:
create table test (
id int,
name varchar2(20),
addvarchar2(20),
v_num int);

insert into test values (1, 'AAA', 'BCD', 1);
insert into test values (1, 'AAA', 'CDE', 2);
insert into test values (1, 'AAA', 'DEF', 3);
insert into test values (2, 'BBB', 'BCF', 1);
insert into test values (2, 'BBB', 'CDF', 2);
insert into test values (3, 'CCC', 'GGG', 1);
insert into test values (4, 'DDD', 'EFG', NULL);
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层
select * from test where (name,add)in(select name,max(add) from test group by name)
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层
谢谢你的回复, 我试了一下, 好像这个query得到的结果不对, 麻烦你有时间的话看一下。
谢谢
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层
好像没把需求说清楚
应该是以name分组,组内求v_num最大的那条记录吧?
select * from
(select a.*,row_number() over (partition by name order by v_num desc nulls last) rn
from table)
where rn=1
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层
用分析函数
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层
your query works perfect. thank you very much
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层
select id,name,addd,v_num from
(select a.*,row_number() over (partition by name order by v_num desc nulls last) rn
from test a)
where rn=1
union all
select id,name,addd,v_num from
test
where v_num is null
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层
没看清这句:找出 v_num 最大
回复

使用道具 举报

千问 | 2010-3-1 11:04:59 | 显示全部楼层

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行