HIVEQL为拥有至少一个满足特定条件的帐户的给定客户选择所有帐户

时间:2019-01-14 18:05:57

标签: hive hiveql

所以我有一个包含信用卡帐户的大型数据集。一个客户可以有多个信用卡帐户。因此,帐户是唯一的,客户肯定不是唯一的(客户“ 1234”可以有5个帐户)。如果任何帐户满足特定要求,我想选择客户的整个帐户列表。需求正在查看其最后一个周期日期(帐户最后一个周期)。让我们来看一下这个数据集...

account|customer|last_cycle_dt
4839|1|20190114
9522|1|20190103
1195|1|20181227
5461|2|20190112
1178|2|20190108
2229|2|20181218
8723|3|20181227
5692|3|20181227
0392|4|20190113
1847|5|20190113
0389|5|20190112
3281|5|20190101
2008|5|20181222
3948|5|20181216

因此,我以一种更易于查看的特定方式对这些数据进行了排序。实际上,可能需要以这种方式对数据进行排序以(最有效地)进行提取,但是我不确定。

因此,我们摘录中的条件将选择所有具有至少1个last_cyc_dt字段为GREATER THAN 20180112的客户帐户

所以... 我们将选择所有客户1个帐户 我们将选择“无客户” 2个帐户 我们将选择无客户3个帐户 我们将选择所有客户4个帐户 我们将为所有客户选择5个帐户

因为该客户的上个周期日期大于20180112的客户至少存在一个帐户

在HIVE中实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

使用max作为窗口函数,获取每个customer的最新last_cycl_dt并检查它是否大于所需的日期。

select account,customer,last_cycl_dt
from (select t.*,max(last_cycle_dt) over(partition by customer) as latest_last_cycl_dt
      from tbl t
     ) t
where latest_last_cycl_dt > '20180112'