表user_test 結(jié)構(gòu):
user_id| user_cname | user_age| others.....
name有重復(fù)項(xiàng),Id為主鍵,age為number,others為其他很多字段
求一查詢
1)Name不能重復(fù),
2)如果Name有重復(fù)去年齡最大的一條數(shù)據(jù)
3)要求能查到,包括ID和others其他字段
在csdn上的網(wǎng)友幫我完成了一種答案:
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上,一位網(wǎng)友給了另一種答案:
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?