hive 去掉重复数据,仅显示需要一条

本文介绍了在Hive中如何去除重复数据,重点讨论了distinct、group by以及ROW_Number()窗口函数的使用。通过ROW_Number() over()结合partition by和order by,可以针对特定列进行去重,特别是在处理时间戳相关的记录时,能保留每个ID的最新一条记录。
摘要由CSDN通过智能技术生成
select count(1)
    ,count(distinct student_no)
from(
    select cj.student_no
        ,if(cj.kpi_year<'2018/08','2018年8月前',kpi_year) as contract_year
        ,row_number() over (partition by cj.student_no order by cj.kpi_year desc)as num
    from hf_mobdb.contract_joint cj
    )hcj
where hcj.num=1

使用row_number() over

或者直接先排序再distinct,默认留第一条记录

有很多数据带有时间戳,例如行为日志,一般来说一个id就确定了一个用户主体,例如我只想取这个用户的一条记录、明确来说是最近的一条行为记录,用distinct就没法做了
思路肯定是将id相同的所有记录按照时间发生的顺序倒排取最后一条,group by、order by 、limit 1
 

 

一、distinct,group by与ROW_Number()窗口函数使用方法

1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重。

(1)当distinct应用到多个字段的时候,distinct必须放在开头,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面

(2)distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的

(3)聚合函数中的

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值