zoukankan      html  css  js  c++  java
  • Hive查询分组内的最大值行

    工作中碰到这么个问题:
    现在有表格形式如下

    日期 名字 编码
    20200910 a 123
    20200815 b 111
    20200625 a 234
    20200208 b 333

    目的是取出该表中每个名字的最新编码。经过百度大法,有两种方法:

    1 开窗函数

    with t1 as (
    select *,row_number() over (partition by name order by date desc) rn
    from table )
    select * from t1 where rn=1
    

    开窗后,扩展一个组内排序的字段,然后取出排序第一位的行。

    2 排序后collect_list转换成列表取指定位置元素

    with t1 as(
    select * from table order by name,date desc
    )
    select collect_list(date)[0],name,collect_list(code)[0] from t1 group by name
    

    将日期组内排逆序后,转换成列表(Array),取列表内的第一个元素。感觉写法上还是没有第一种方法来得快。

    注:以上代码未在环境中测试,仅提供思路的伪代码

  • 相关阅读:
    课程评价
    6.1-6.7 第十六周总结
    5.31 软件开发日志
    5.25-5.31 第十五周总结
    5.30 软件开发日志
    5.29 软件开发日志
    5.28 软件开发日志
    对搜狗输入法的评价
    找水王
    用户模板/用户场景
  • 原文地址:https://www.cnblogs.com/kang-mei-208/p/13845529.html
Copyright © 2011-2022 走看看