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逻辑吧  

posted @ 2018-01-18 17:43  J. Lingear  阅读(2684)  评论(0编辑  收藏  举报