标签:
分组最大值记录
比如 序号 名称 数量 1 A 20 2 A 10 1 B 20 2 B 40 3 B 10 1 C 20 2 C 40 |
select * from 表 where (序号,名称) in (select max(序号),名称 from 表 group by 名称)
分析函数:
select
序号 , 名称 , 数量 from
(select
序号 , 名称 , 数量
,row_number()
over(partition by 名称 order by 序号 desc ) rn
form
tab_name )
where
rn=1
或
select
序号 , 名称 , 数量 from
(select
序号 , 名称 , 数量
,
max(序号) over(partition by 名称) rn
form
tab_name )
where rn=序号
注意:max的字段只能是number类型字段,如果是date类型的,会提示错误。date类型用上面的row_number()来做就可以了。
在oracle中有一数据表exam_result(成绩记录表),
表中的一条记录描述了“某个班某个学生某次考试的成绩"
create
table EXAM_RESULT
(
ID NUMBER(10) not null,
--主键
CLASSID NUMBER(10) not null, -- 班级id,关联到班级表
USERID
NUMBER(10) not null, --用户id,关联到用户表
EXAMID NUMBER(10) not
null, --试卷id,关联到试卷表
RESULT
NUMBER(3) --成绩
)
现在要求统计完成了试卷id为1,2,3的成绩的前3名
即完成了试卷id为1的前3名,完成了试卷id为2的前3名,完成了试卷id为3的前3名
标签:
原文地址:http://www.cnblogs.com/moonwind/p/4561458.html