表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 閱讀(431)
評論(1) 編輯 收藏 所屬分類:
DB