表user_test 结构:
user_id| user_cname | user_age| others.....
name有重复项,Id为主键,age为number,others为其他很多字段
求一查询
1)Name不能重复,
2)如果Name有重复去年龄最大的一条数据
3)要求能查到,包括ID和others其他字段
在csdn上的网友帮我完成了一种答案:
select * from user_test where user_id in(
select max(user_id) from(
select a.user_id, a.user_cname , a.user_age from user_test a ,
(select user_cname, max(user_age) as maxage from user_test group by user_cname ) b
where a.user_cname = b.user_cname and a.user_age = b.maxage)
group by user_cname)
这种答案能满足要求,但是好像嵌套过多,呵呵,也许会影响效率
我在itpub上,一位网友给了另一种答案:
select * from (select user_id, user_cname, user_age,
row_number() over(
partition by user_cname order by user_age desc
) rn
from user_test)
where rn =1
so cool ,isn't it?
posted on 2005-12-09 11:31
Stephen 阅读(423)
评论(1) 编辑 收藏 所属分类:
DB