Hive 如何在蜂巢中获得最老和最新的
我有一个名为signal的表,其中包含以下列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
| 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的最小值