选择具有最大日期列的记录在Hive SQL中按主键分组

时间:2019-02-08 17:59:10

标签: sql hive hiveql

我有一个如下表

primary_key  act_date  C1 C2 C3 C4 ...C50
K1           01-12-18
K1           03-12-18
K1           30-12-18
K2           16-11-18
K3           null
K4           null          
K4           15-11-18

我想选择所有列和行,以便仅选择与由primary_key分组的max(act_date)相对应的行。如果有两条记录的act_date和value为null,则在act_date列中选择不为null的行。

上表的最终o / p必须如下所示

primary_key  act_date  C1 C2 C3 C4 ...C50
K1           30-12-18
K2           16-11-18
K3           null         
K4           15-11-18

我尝试了以下操作,但是它要求我也将表中的其他列分组,这将再次对每个primary_key重复输出多行,这不是我所需要的。

select a.* from
(select a.*,
       max(act_date) over() as max_act_date 
  from table a) a
 where (a.act_date = a.max_act_date)
group by a.primary_key; 

赞赏任何反馈/输入

2 个答案:

答案 0 :(得分:1)

因此,其clear,primary_key表示唯一字段。在您的示例中primary_key只是column_name。

这是一种方法

select * from(
select *
       ,row_number() over(partition by t.primary_key order by act_date desc) rnk
 from table
  )x
where x.rnk=1

答案 1 :(得分:0)

另一种获取最大值的方法。

选择primary_key,max(act_date)作为max_act_date 从表 按primary_key分组;