Hive分组后取组内排名方法row_number
今天遇到这样一个需求场景,要取出 每一种分类(a,b组合分类) 符合条件的日期(字段c) 距离现在最近的10个日期 的数据
首先想到的是用sql筛选出符合某种条件的所有数据,这样的事情很简单
然后用脚本(python)遍历每一种组合(a,b),然后按日期c倒序排序 取前10
如果拿到这个数据后 还要去hive连表查询其他数据,那么上面的方法就比较麻烦,可能需要再取多次hive
我们有没有sql的方法直接完成这样的事情呢?有的 我们可以用到row_number:
with t_rank as ( select a, b, c, Row_Number() OVER (partition by a,b ORDER BY c desc) rank from t_test ) select a,b,c from t_rank where rank <= 10
下面就继续嵌套添加其他的sql逻辑吧