使用partition by 函数分组
select t.elder_id,t.elder_name,count(1) over(partition by t.elder_id,t.elder_name) from t_health_evalution t;
使用group by函数分组
select t.elder_id,t.elder_name from t_health_evalution t group by t.elder_id,t.elder_name;
可以看到group by 和partition by 的区别,group by每个分组只返回一次结果,partition by每个分组的全部结果都会返回,所以针对这个前提,我们可以在分组内部再进行排序,如下:
select * from (
--partiotion函数分组内部排序
select t.elder_id,t.elder_name,rank() over(partition by t.elder_id,t.elder_name order by t.create_time) as rk from t_health_evalution t
--获取分组内部前两条
)t1 where t1.rk<3;