如何在Hive SQL中获取每个组的最大row_number()

时间:2018-06-28 14:52:54

标签: sql hadoop hive hiveql

在配置单元SQL中使用row_number(),可以通过在where子句中选择1来过滤重复项/选择id的第一个实例,如下所示。我需要的是如何找到每个组中的最后一个实例。

pip install -U pandas

我的要求是,例如,如果ID 1212在表中具有3个实例,而1313在表中具有5个实例,如下所示,我可以使用上述查询,并在where子句中选择1来仅获得一个实例。但是在下面我想要ID 1212为3,ID 1313为5。

select * from 
(select c1,c2,c3,c4,c5,id, row_number() over(partition by id ORDER BY id) as seq
from 
table) as cnt where seq = 1;

4 个答案:

答案 0 :(得分:2)

使用COUNT(*) OVER (PARTITION BY id) AS cnt添加一个额外的列。这将包含该组中的行数,这也是该组的最大ROW_NUMBER值。

答案 1 :(得分:1)

select id,max(seq) over(partition by id ORDER BY id)from 
(select *, row_number() over(partition by id ORDER BY id) as seq
from 
table)maxseq
group by id

答案 2 :(得分:1)

使用group by中的所有这些列,并使用max上的row_number()

select c1,c2,c3,c4,c5,id,max(r_no) 
from 
(
    select c1,c2,c3,c4,c5,id, row_number() over (partition by id ORDER BY c1,c2,c3,c4,c5,id) as r_no
    from 
    table
) a
group by c1,c2,c3,c4,c5,id

答案 3 :(得分:1)

将升序更改为降序:

select t.* 
from (select c1, c2, c3, c4, c5, id,
             row_number() over (partition by id ORDER BY id desc) as seqnum
------------------------------------------------------------^
      from table
    ) t
where seqnum = 1;