Hive 如何在蜂巢中获得最老和最新的

Hive 如何在蜂巢中获得最老和最新的,hive,hql,Hive,Hql,我有一个名为signal的表,其中包含以下列 实体id 项目编号 月号 信号计数 输入表: | entity_id | item_id | month_id | signal_count | 101 3 2015 2 104 4 2017 1 101 1 2017 1 104 2

我有一个名为signal的表,其中包含以下列

  • 实体id
  • 项目编号
  • 月号
  • 信号计数
  • 输入表:

    | entity_id | item_id | month_id | signal_count |
    
         101         3        2015           2
         104         4        2017           1
         101         1        2017           1
         104         2        2016           0
         107         2        2011           1
         107         0        2011           2
    
    我需要信号计数和项目id之和,作为基于月份id和按实体分组id的最早项目id和最新项目id

    如果月份id相同,则取项目id的最小值

    预期结果如下:

    | entity_id | oldest_item_id | newest_month_id | signal_count |
    
         101             3                1               3 
         104             2                4               1
         107             0                0               3
    

    使用
    sum
    窗口函数获取每个实体id的总和和
    first\u值
    根据所需的月id顺序获取最早和最新的项目id

    select distinct entity_id,oldest_item_id,newest_item_id,signal_count_sum
    from (select t.*
                ,sum(signal_count) over(partition by entity_id) as signal_sum
                ,first_value(item_id) over(partition by entity_id order by month_id) as oldest_item_id
                ,first_value(item_id) over(partition by entity_id order by month_id desc) as newest_item_id          
          from tbl t
         ) t
    
    如果每个实体有多行具有相同的月份id,则要断开联系并获得最少的项目id,请使用
    规范将
    项目id
    添加到
    订购方

    select distinct entity_id,oldest_item_id,newest_item_id,signal_count_sum
    from (select t.*
                ,sum(signal_count) over(partition by entity_id) as signal_sum
                ,first_value(item_id) over(partition by entity_id order by month_id,item_id rows unbounded preceding) as oldest_item_id
                ,first_value(item_id) over(partition by entity_id order by month_id desc,item_id rows unbounded preceding) as newest_item_id          
          from tbl t
         ) t
    

    请在问题中添加一些示例数据和预期结果。此外,您还需要定义逻辑以获取每个组中的第一行。您现在可以看到吗?假设月份id相同,那么如何获取项目id的最小值