需求:
获取分组后数据的某一部分。例如登录日志表中查询 所有用户最后一次登录时间,需要对用户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,并只获取最大日期的那一条