oracle 分组查询后获取某列最大值或最小值的记录

需求

获取分组后数据的某一部分。例如登录日志表中查询 所有用户最后一次登录时间,需要对用户id进行分组,并获取登录时间最大的那一条数据

 

语法:

SELECT *   

FROM  (SELECT 分组的字段名,    

                            ROW_NUMBER() OVER(PARTITION BY 分组的字段名 ORDER BY 排序的字段名) AS RN   

                  FROM 表名)   

WHERE RN <= 10   得到分组后,数据的前几条

 

实战:

我要查询RPT_OPERATION_LOG日志表最新登录日期和登录版本,则按user_id分组,按operate_date进行排序

select * from(
       select t.user_id,t.version_no,t.operate_date,
       ROW_NUMBER() over (partition by t.user_id order by t.operate_date desc) RN
       from RPT_OPERATION_LOG t
       
) where RN = 1

这样就可以筛选出不重复的唯一user_id,并只获取最大日期的那一条

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页