众所周知,Oracle和SQL server支持分组组内排序,语法为
row_number() over (partition by col1 order by col2),
表示根据col1分组,在分组内部根据col2排序
可以参考:https://www.cnblogs.com/starzy/p/11146156.html
示例:
select id,row_number() over (partition by id order by partner_id DESC) rank
from table_name
今天我们聊聊如果MySQL要实现组内排序,有哪些思路?
1、如果是只求组内最大值/最新的等
可以先 select a,max(time) from A group by a,
然后再到A表中,where a = a,time = max(time)筛选,
注意 一定要回表用上述条件查一次,如果用id查,id和maxtime并不一定能匹配
2、有这样一个需求,
表A:uid,统计次数,uid是唯一的
表B用户点击记录表:uid,click_time,同一个用户有多次点击记录
表A记录对不同用户,统计最新的前N次点击记录
这个需求,从java业务后端开发的角度看,我更偏向于,遍历A表然后去B表中查询对应条数,将最后结果汇总;